{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Temporal Forecast Reconciliation in `forecastML`\n",
    "### *Nick Redell* nickalusredell@gmail.com\n",
    "### 2020-05-21\n",
    "\n",
    "***\n",
    "\n",
    "# Purpose\n",
    "\n",
    "The goal of this notebook is demonstrate how machine learning and statistical forecasts can be reconciled to produce a coherent forecast over various planning horizons (e.g., monthly and annually). Using (a) ML methods to forecast time series with higher frequencies (e.g., weekly) and lots of data and (b) statistical methods to forecast time series with lower frequencies (e.g., quarterly) is a complementary approach to forecasting.\n",
    "\n",
    "The benefits of temporal forecast reconciliation are two-fold:\n",
    "   1. **Improved forecast accuracy**.\n",
    "   2. After reconciliation, forecasts at higher levels of aggregation (e.g., yearly) are simply the sum of the relevant lowest-level forecast (e.g., monthly) which allows **operational, tactical, and strategic plans to be based off of the same forecast**.\n",
    "\n",
    "# `forecastML::reconcile_forecasts()`\n",
    "\n",
    "* The method implemented is temporal forecast reconciliation with structural scaling from:  \n",
    "  \n",
    "  Athanasopoulos, G., Hyndman, R. J., Kourentzes, N., & Petropoulos, F. (2017). [Forecasting with temporal hierarchies](https://robjhyndman.com/publications/temporal-hierarchies/). European Journal of Operational Research, 262(1), 60-74.\n",
    "\n",
    "\n",
    "* `reconcile_forecasts()` works with forecasts from **any package**.\n",
    "\n",
    "\n",
    "* `reconcile_forecasts()` works with forecasts at **any forecast horizon frequency** from seconds to years.\n",
    "\n",
    "***\n",
    "\n",
    "# Example: Reconciling weekly and monthly forecasts\n",
    "\n",
    "## Task\n",
    "\n",
    "* **Domain:** Ansett Airlines economy passenger counts over several years\n",
    "* **Number of time series:** 10\n",
    "* **Frequency of data collection:** 1 week\n",
    "* **Forecast horizon:** 4-months-ahead\n",
    "* **Method:** Temporal hierarchical forecast reconciliation (forecasts are *not* reconciled across groups)\n",
    "* **Model outcome:** passengers\n",
    "* **Models:**\n",
    "    + ARIMA at the monthly level from the `fable` package\n",
    "    + LASSO at the weekly level from `glmnet` with `forecastML`\n",
    "\n",
    "## Final Product\n",
    "  \n",
    "<p>\n",
    "  \n",
    "<div>\n",
    "<img src=\"forecast_comparison.png\"/>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## `R` Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "options(warn = -1)\n",
    "options(repr.plot.width = 12, repr.plot.height = 6)\n",
    "\n",
    "library(dplyr)\n",
    "library(lubridate)\n",
    "library(ggplot2)\n",
    "library(tsibble)  # Time series data.frames.\n",
    "library(tsibbledata)\n",
    "library(fable)  # Statistical forecasting.\n",
    "library(forecastML)  # v0.9.1\n",
    "library(glmnet)  # LASSO model in R."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## Data Preparation\n",
    "\n",
    "* Load the example data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 6 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>week</th><th scope=col>airports</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;week&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>1</th><td>1987 W26</td><td>ADL-PER</td><td>2084</td></tr>\n",
       "\t<tr><th scope=row>2</th><td>1987 W27</td><td>ADL-PER</td><td>2186</td></tr>\n",
       "\t<tr><th scope=row>3</th><td>1987 W28</td><td>ADL-PER</td><td>2137</td></tr>\n",
       "\t<tr><th scope=row>4</th><td>1987 W29</td><td>ADL-PER</td><td>2090</td></tr>\n",
       "\t<tr><th scope=row>5</th><td>1987 W30</td><td>ADL-PER</td><td>1595</td></tr>\n",
       "\t<tr><th scope=row>6</th><td>1987 W31</td><td>ADL-PER</td><td>1908</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 3\n",
       "\\begin{tabular}{r|lll}\n",
       "  & week & airports & passengers\\\\\n",
       "  & <week> & <chr> & <dbl>\\\\\n",
       "\\hline\n",
       "\t1 & 1987 W26 & ADL-PER & 2084\\\\\n",
       "\t2 & 1987 W27 & ADL-PER & 2186\\\\\n",
       "\t3 & 1987 W28 & ADL-PER & 2137\\\\\n",
       "\t4 & 1987 W29 & ADL-PER & 2090\\\\\n",
       "\t5 & 1987 W30 & ADL-PER & 1595\\\\\n",
       "\t6 & 1987 W31 & ADL-PER & 1908\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 3\n",
       "\n",
       "| <!--/--> | week &lt;week&gt; | airports &lt;chr&gt; | passengers &lt;dbl&gt; |\n",
       "|---|---|---|---|\n",
       "| 1 | 1987 W26 | ADL-PER | 2084 |\n",
       "| 2 | 1987 W27 | ADL-PER | 2186 |\n",
       "| 3 | 1987 W28 | ADL-PER | 2137 |\n",
       "| 4 | 1987 W29 | ADL-PER | 2090 |\n",
       "| 5 | 1987 W30 | ADL-PER | 1595 |\n",
       "| 6 | 1987 W31 | ADL-PER | 1908 |\n",
       "\n"
      ],
      "text/plain": [
       "  week     airports passengers\n",
       "1 1987 W26 ADL-PER  2084      \n",
       "2 1987 W27 ADL-PER  2186      \n",
       "3 1987 W28 ADL-PER  2137      \n",
       "4 1987 W29 ADL-PER  2090      \n",
       "5 1987 W30 ADL-PER  1595      \n",
       "6 1987 W31 ADL-PER  1908      "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data(ansett, package = \"tsibbledata\")\n",
    "\n",
    "data <- as.data.frame(ansett)\n",
    "\n",
    "names(data) <- tolower(names(data))\n",
    "\n",
    "# This dataset has two levels of grouping--airport and class. We'll select one class for analysis.\n",
    "data <- data %>%\n",
    "  dplyr::filter(class == \"Economy\") %>%\n",
    "  dplyr::select(-class)\n",
    "\n",
    "head(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       ".list-inline {list-style: none; margin:0; padding: 0}\n",
       ".list-inline>li {display: inline-block}\n",
       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
       "</style>\n",
       "<ol class=list-inline><li>'ADL-PER'</li><li>'MEL-ADL'</li><li>'MEL-BNE'</li><li>'MEL-OOL'</li><li>'MEL-PER'</li><li>'MEL-SYD'</li><li>'SYD-ADL'</li><li>'SYD-BNE'</li><li>'SYD-OOL'</li><li>'SYD-PER'</li></ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 'ADL-PER'\n",
       "\\item 'MEL-ADL'\n",
       "\\item 'MEL-BNE'\n",
       "\\item 'MEL-OOL'\n",
       "\\item 'MEL-PER'\n",
       "\\item 'MEL-SYD'\n",
       "\\item 'SYD-ADL'\n",
       "\\item 'SYD-BNE'\n",
       "\\item 'SYD-OOL'\n",
       "\\item 'SYD-PER'\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 'ADL-PER'\n",
       "2. 'MEL-ADL'\n",
       "3. 'MEL-BNE'\n",
       "4. 'MEL-OOL'\n",
       "5. 'MEL-PER'\n",
       "6. 'MEL-SYD'\n",
       "7. 'SYD-ADL'\n",
       "8. 'SYD-BNE'\n",
       "9. 'SYD-OOL'\n",
       "10. 'SYD-PER'\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       " [1] \"ADL-PER\" \"MEL-ADL\" \"MEL-BNE\" \"MEL-OOL\" \"MEL-PER\" \"MEL-SYD\" \"SYD-ADL\"\n",
       " [8] \"SYD-BNE\" \"SYD-OOL\" \"SYD-PER\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "airport_list <- unique(data$airports)\n",
    "airport_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Date features for aggregation\n",
    "\n",
    "* Let's create several date features that will allow us to aggregate the passenger totals at the weekly and monthly levels. We could use thse features with our LASSO model in `forecastML`, but we'll skip that this time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 6 × 6</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>week</th><th scope=col>airports</th><th scope=col>passengers</th><th scope=col>month</th><th scope=col>quarter</th><th scope=col>year</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;week&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;int&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>1</th><td>1987 W26</td><td>ADL-PER</td><td>2084</td><td>6</td><td>2</td><td>1987</td></tr>\n",
       "\t<tr><th scope=row>2</th><td>1987 W27</td><td>ADL-PER</td><td>2186</td><td>6</td><td>2</td><td>1987</td></tr>\n",
       "\t<tr><th scope=row>3</th><td>1987 W28</td><td>ADL-PER</td><td>2137</td><td>7</td><td>3</td><td>1987</td></tr>\n",
       "\t<tr><th scope=row>4</th><td>1987 W29</td><td>ADL-PER</td><td>2090</td><td>7</td><td>3</td><td>1987</td></tr>\n",
       "\t<tr><th scope=row>5</th><td>1987 W30</td><td>ADL-PER</td><td>1595</td><td>7</td><td>3</td><td>1987</td></tr>\n",
       "\t<tr><th scope=row>6</th><td>1987 W31</td><td>ADL-PER</td><td>1908</td><td>7</td><td>3</td><td>1987</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 6\n",
       "\\begin{tabular}{r|llllll}\n",
       "  & week & airports & passengers & month & quarter & year\\\\\n",
       "  & <week> & <chr> & <dbl> & <dbl> & <int> & <dbl>\\\\\n",
       "\\hline\n",
       "\t1 & 1987 W26 & ADL-PER & 2084 & 6 & 2 & 1987\\\\\n",
       "\t2 & 1987 W27 & ADL-PER & 2186 & 6 & 2 & 1987\\\\\n",
       "\t3 & 1987 W28 & ADL-PER & 2137 & 7 & 3 & 1987\\\\\n",
       "\t4 & 1987 W29 & ADL-PER & 2090 & 7 & 3 & 1987\\\\\n",
       "\t5 & 1987 W30 & ADL-PER & 1595 & 7 & 3 & 1987\\\\\n",
       "\t6 & 1987 W31 & ADL-PER & 1908 & 7 & 3 & 1987\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 6\n",
       "\n",
       "| <!--/--> | week &lt;week&gt; | airports &lt;chr&gt; | passengers &lt;dbl&gt; | month &lt;dbl&gt; | quarter &lt;int&gt; | year &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|---|\n",
       "| 1 | 1987 W26 | ADL-PER | 2084 | 6 | 2 | 1987 |\n",
       "| 2 | 1987 W27 | ADL-PER | 2186 | 6 | 2 | 1987 |\n",
       "| 3 | 1987 W28 | ADL-PER | 2137 | 7 | 3 | 1987 |\n",
       "| 4 | 1987 W29 | ADL-PER | 2090 | 7 | 3 | 1987 |\n",
       "| 5 | 1987 W30 | ADL-PER | 1595 | 7 | 3 | 1987 |\n",
       "| 6 | 1987 W31 | ADL-PER | 1908 | 7 | 3 | 1987 |\n",
       "\n"
      ],
      "text/plain": [
       "  week     airports passengers month quarter year\n",
       "1 1987 W26 ADL-PER  2084       6     2       1987\n",
       "2 1987 W27 ADL-PER  2186       6     2       1987\n",
       "3 1987 W28 ADL-PER  2137       7     3       1987\n",
       "4 1987 W29 ADL-PER  2090       7     3       1987\n",
       "5 1987 W30 ADL-PER  1595       7     3       1987\n",
       "6 1987 W31 ADL-PER  1908       7     3       1987"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data$month <- lubridate::month(data$week)\n",
    "data$quarter <- lubridate::quarter(data$week)\n",
    "data$year <- lubridate::year(data$week)\n",
    "\n",
    "head(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## Monthly Forecasts with ARIMA\n",
    "\n",
    "* Check out the [tidyverts](https://tidyverts.org/) for more info on the tidy approach to forecasting in `R`. I'm a fan."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_month <- data\n",
    "data_month$index <- as.Date(paste0(data_month$year, \"-\", data_month$month, \"-01\"))\n",
    "data_month$index <- tsibble::yearmonth(data_month$index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Monthly aggregation.\n",
    "data_month <- data_month %>%\n",
    "  dplyr::group_by(airports, index) %>%\n",
    "  dplyr::summarize(\"passengers\" = sum(passengers, na.rm = TRUE)) %>%\n",
    "  dplyr::ungroup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A tbl_ts: 6 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>airports</th><th scope=col>index</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;mth&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Jun</td><td> 4270</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Jul</td><td> 7730</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Aug</td><td> 9809</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Sep</td><td> 9300</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Oct</td><td> 9181</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>1987 Nov</td><td>11473</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A tbl\\_ts: 6 × 3\n",
       "\\begin{tabular}{lll}\n",
       " airports & index & passengers\\\\\n",
       " <chr> & <mth> & <dbl>\\\\\n",
       "\\hline\n",
       "\t ADL-PER & 1987 Jun &  4270\\\\\n",
       "\t ADL-PER & 1987 Jul &  7730\\\\\n",
       "\t ADL-PER & 1987 Aug &  9809\\\\\n",
       "\t ADL-PER & 1987 Sep &  9300\\\\\n",
       "\t ADL-PER & 1987 Oct &  9181\\\\\n",
       "\t ADL-PER & 1987 Nov & 11473\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A tbl_ts: 6 × 3\n",
       "\n",
       "| airports &lt;chr&gt; | index &lt;mth&gt; | passengers &lt;dbl&gt; |\n",
       "|---|---|---|\n",
       "| ADL-PER | 1987 Jun |  4270 |\n",
       "| ADL-PER | 1987 Jul |  7730 |\n",
       "| ADL-PER | 1987 Aug |  9809 |\n",
       "| ADL-PER | 1987 Sep |  9300 |\n",
       "| ADL-PER | 1987 Oct |  9181 |\n",
       "| ADL-PER | 1987 Nov | 11473 |\n",
       "\n"
      ],
      "text/plain": [
       "  airports index    passengers\n",
       "1 ADL-PER  1987 Jun  4270     \n",
       "2 ADL-PER  1987 Jul  7730     \n",
       "3 ADL-PER  1987 Aug  9809     \n",
       "4 ADL-PER  1987 Sep  9300     \n",
       "5 ADL-PER  1987 Oct  9181     \n",
       "6 ADL-PER  1987 Nov 11473     "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_month <- tsibble::as_tsibble(data_month, key = airports, index = index)\n",
    "\n",
    "data_month <- tsibble::fill_gaps(data_month)\n",
    "\n",
    "head(data_month)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Fit a separate ARIMA model to each of the 10 airports with one line of code."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_month <- data_month %>% fabletools::model(arima = fable::ARIMA(passengers))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Forecast 4 months into the future."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_forecasts_month <- forecast(model_month, h = \"4 months\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Plot forecasts for 3 of the 10 airports.\n",
    "\n",
    "\n",
    "* These forecasts look fairly flat. Hopefully, we can boost the signal in the monthly time series by reconciling these forecasts with the weekly forecasts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 360,
       "width": 720
      },
      "text/plain": {
       "height": 360,
       "width": 720
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_forecasts_month %>%\n",
    "  dplyr::filter(airports %in% airport_list[1:3]) %>%\n",
    "  autoplot(dplyr::filter(data_month, airports %in% airport_list[1:3]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## Weekly Forecasts with the LASSO in `forecastML`\n",
    "\n",
    "* I'll skip most of the step-by-step explanation about how to use `forecastML`. Refer to the package vignettes, cheat sheets, or other notebooks if additional context is needed.\n",
    "\n",
    "\n",
    "* Our highest level forecast model is producing monthly forecasts at a horizon of ~16 weeks, sometimes more depending on whether or not a month has 5 weeks. To be safe, we'll build a model that can forecast 20 weeks into the future and simply discard the excess forecasts during reconciliation.  `reconcile_forecasts()` takes care of all the date alignments."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 6 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>week</th><th scope=col>airports</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;date&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>1</th><td>1987-06-22</td><td>ADL-PER</td><td>2084</td></tr>\n",
       "\t<tr><th scope=row>2</th><td>1987-06-29</td><td>ADL-PER</td><td>2186</td></tr>\n",
       "\t<tr><th scope=row>3</th><td>1987-07-06</td><td>ADL-PER</td><td>2137</td></tr>\n",
       "\t<tr><th scope=row>4</th><td>1987-07-13</td><td>ADL-PER</td><td>2090</td></tr>\n",
       "\t<tr><th scope=row>5</th><td>1987-07-20</td><td>ADL-PER</td><td>1595</td></tr>\n",
       "\t<tr><th scope=row>6</th><td>1987-07-27</td><td>ADL-PER</td><td>1908</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 3\n",
       "\\begin{tabular}{r|lll}\n",
       "  & week & airports & passengers\\\\\n",
       "  & <date> & <fct> & <dbl>\\\\\n",
       "\\hline\n",
       "\t1 & 1987-06-22 & ADL-PER & 2084\\\\\n",
       "\t2 & 1987-06-29 & ADL-PER & 2186\\\\\n",
       "\t3 & 1987-07-06 & ADL-PER & 2137\\\\\n",
       "\t4 & 1987-07-13 & ADL-PER & 2090\\\\\n",
       "\t5 & 1987-07-20 & ADL-PER & 1595\\\\\n",
       "\t6 & 1987-07-27 & ADL-PER & 1908\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 3\n",
       "\n",
       "| <!--/--> | week &lt;date&gt; | airports &lt;fct&gt; | passengers &lt;dbl&gt; |\n",
       "|---|---|---|---|\n",
       "| 1 | 1987-06-22 | ADL-PER | 2084 |\n",
       "| 2 | 1987-06-29 | ADL-PER | 2186 |\n",
       "| 3 | 1987-07-06 | ADL-PER | 2137 |\n",
       "| 4 | 1987-07-13 | ADL-PER | 2090 |\n",
       "| 5 | 1987-07-20 | ADL-PER | 1595 |\n",
       "| 6 | 1987-07-27 | ADL-PER | 1908 |\n",
       "\n"
      ],
      "text/plain": [
       "  week       airports passengers\n",
       "1 1987-06-22 ADL-PER  2084      \n",
       "2 1987-06-29 ADL-PER  2186      \n",
       "3 1987-07-06 ADL-PER  2137      \n",
       "4 1987-07-13 ADL-PER  2090      \n",
       "5 1987-07-20 ADL-PER  1595      \n",
       "6 1987-07-27 ADL-PER  1908      "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_week <- data\n",
    "\n",
    "data_week[, c(\"month\", \"quarter\", \"year\")] <- NULL  # We could use these as dynamic features.\n",
    "\n",
    "data_week$week <- as.Date(data_week$week)\n",
    "\n",
    "data_week$airports <- as.factor(data_week$airports)  # For modeling.\n",
    "\n",
    "data_week <- forecastML::fill_gaps(data_week, date_col = 1, frequency = \"1 week\", groups = \"airports\")\n",
    "\n",
    "head(data_week)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::create_lagged_df(type = \"train\")`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 6 × 52</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>passengers</th><th scope=col>airports</th><th scope=col>passengers_lag_4</th><th scope=col>passengers_lag_5</th><th scope=col>passengers_lag_6</th><th scope=col>passengers_lag_7</th><th scope=col>passengers_lag_8</th><th scope=col>passengers_lag_9</th><th scope=col>passengers_lag_10</th><th scope=col>passengers_lag_11</th><th scope=col>...</th><th scope=col>passengers_lag_44</th><th scope=col>passengers_lag_45</th><th scope=col>passengers_lag_46</th><th scope=col>passengers_lag_47</th><th scope=col>passengers_lag_48</th><th scope=col>passengers_lag_49</th><th scope=col>passengers_lag_50</th><th scope=col>passengers_lag_51</th><th scope=col>passengers_lag_52</th><th scope=col>passengers_lag_53</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>...</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>1</th><td>2084</td><td>ADL-PER</td><td>  NA</td><td>  NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "\t<tr><th scope=row>2</th><td>2186</td><td>ADL-PER</td><td>  NA</td><td>  NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "\t<tr><th scope=row>3</th><td>2137</td><td>ADL-PER</td><td>  NA</td><td>  NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "\t<tr><th scope=row>4</th><td>2090</td><td>ADL-PER</td><td>  NA</td><td>  NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "\t<tr><th scope=row>5</th><td>1595</td><td>ADL-PER</td><td>2084</td><td>  NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "\t<tr><th scope=row>6</th><td>1908</td><td>ADL-PER</td><td>2186</td><td>2084</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>...</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td><td>NA</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 6 × 52\n",
       "\\begin{tabular}{r|lllllllllllllllllllll}\n",
       "  & passengers & airports & passengers\\_lag\\_4 & passengers\\_lag\\_5 & passengers\\_lag\\_6 & passengers\\_lag\\_7 & passengers\\_lag\\_8 & passengers\\_lag\\_9 & passengers\\_lag\\_10 & passengers\\_lag\\_11 & ... & passengers\\_lag\\_44 & passengers\\_lag\\_45 & passengers\\_lag\\_46 & passengers\\_lag\\_47 & passengers\\_lag\\_48 & passengers\\_lag\\_49 & passengers\\_lag\\_50 & passengers\\_lag\\_51 & passengers\\_lag\\_52 & passengers\\_lag\\_53\\\\\n",
       "  & <dbl> & <fct> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & ... & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl>\\\\\n",
       "\\hline\n",
       "\t1 & 2084 & ADL-PER &   NA &   NA & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\t2 & 2186 & ADL-PER &   NA &   NA & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\t3 & 2137 & ADL-PER &   NA &   NA & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\t4 & 2090 & ADL-PER &   NA &   NA & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\t5 & 1595 & ADL-PER & 2084 &   NA & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\t6 & 1908 & ADL-PER & 2186 & 2084 & NA & NA & NA & NA & NA & NA & ... & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 6 × 52\n",
       "\n",
       "| <!--/--> | passengers &lt;dbl&gt; | airports &lt;fct&gt; | passengers_lag_4 &lt;dbl&gt; | passengers_lag_5 &lt;dbl&gt; | passengers_lag_6 &lt;dbl&gt; | passengers_lag_7 &lt;dbl&gt; | passengers_lag_8 &lt;dbl&gt; | passengers_lag_9 &lt;dbl&gt; | passengers_lag_10 &lt;dbl&gt; | passengers_lag_11 &lt;dbl&gt; | ... ... | passengers_lag_44 &lt;dbl&gt; | passengers_lag_45 &lt;dbl&gt; | passengers_lag_46 &lt;dbl&gt; | passengers_lag_47 &lt;dbl&gt; | passengers_lag_48 &lt;dbl&gt; | passengers_lag_49 &lt;dbl&gt; | passengers_lag_50 &lt;dbl&gt; | passengers_lag_51 &lt;dbl&gt; | passengers_lag_52 &lt;dbl&gt; | passengers_lag_53 &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
       "| 1 | 2084 | ADL-PER |   NA |   NA | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "| 2 | 2186 | ADL-PER |   NA |   NA | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "| 3 | 2137 | ADL-PER |   NA |   NA | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "| 4 | 2090 | ADL-PER |   NA |   NA | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "| 5 | 1595 | ADL-PER | 2084 |   NA | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "| 6 | 1908 | ADL-PER | 2186 | 2084 | NA | NA | NA | NA | NA | NA | ... | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |\n",
       "\n"
      ],
      "text/plain": [
       "  passengers airports passengers_lag_4 passengers_lag_5 passengers_lag_6\n",
       "1 2084       ADL-PER    NA               NA             NA              \n",
       "2 2186       ADL-PER    NA               NA             NA              \n",
       "3 2137       ADL-PER    NA               NA             NA              \n",
       "4 2090       ADL-PER    NA               NA             NA              \n",
       "5 1595       ADL-PER  2084               NA             NA              \n",
       "6 1908       ADL-PER  2186             2084             NA              \n",
       "  passengers_lag_7 passengers_lag_8 passengers_lag_9 passengers_lag_10\n",
       "1 NA               NA               NA               NA               \n",
       "2 NA               NA               NA               NA               \n",
       "3 NA               NA               NA               NA               \n",
       "4 NA               NA               NA               NA               \n",
       "5 NA               NA               NA               NA               \n",
       "6 NA               NA               NA               NA               \n",
       "  passengers_lag_11 ... passengers_lag_44 passengers_lag_45 passengers_lag_46\n",
       "1 NA                ... NA                NA                NA               \n",
       "2 NA                ... NA                NA                NA               \n",
       "3 NA                ... NA                NA                NA               \n",
       "4 NA                ... NA                NA                NA               \n",
       "5 NA                ... NA                NA                NA               \n",
       "6 NA                ... NA                NA                NA               \n",
       "  passengers_lag_47 passengers_lag_48 passengers_lag_49 passengers_lag_50\n",
       "1 NA                NA                NA                NA               \n",
       "2 NA                NA                NA                NA               \n",
       "3 NA                NA                NA                NA               \n",
       "4 NA                NA                NA                NA               \n",
       "5 NA                NA                NA                NA               \n",
       "6 NA                NA                NA                NA               \n",
       "  passengers_lag_51 passengers_lag_52 passengers_lag_53\n",
       "1 NA                NA                NA               \n",
       "2 NA                NA                NA               \n",
       "3 NA                NA                NA               \n",
       "4 NA                NA                NA               \n",
       "5 NA                NA                NA               \n",
       "6 NA                NA                NA               "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The column position of our 'passengers' outcome (after removing the date column).\n",
    "# The outcome will be moved to the first position in the resulting lagged data.frames.\n",
    "outcome_col <- 2\n",
    "\n",
    "# Forecast 1, 1:4, ... 1:20 weeks into the future in 1-week increments.\n",
    "horizons <- c(1, 4, 8, 12, 16, 20)\n",
    "\n",
    "# Feature lags in 1 week intervals. Notice that feature lags that do not support direct forecasting at \n",
    "# a given horizon are silently dropped.\n",
    "lookback <- 1:53\n",
    "\n",
    "groups <- \"airports\"\n",
    "\n",
    "dates <- data_week$week\n",
    "\n",
    "# We don't need or want dates/times in the modeling dataset.\n",
    "data_week$week <- NULL\n",
    "\n",
    "frequency <- \"1 week\"\n",
    "\n",
    "data_train <- forecastML::create_lagged_df(data_week, type = \"train\", outcome_col = outcome_col,\n",
    "                                           lookback = lookback, horizon = horizons,\n",
    "                                           dates = dates, frequency = frequency,\n",
    "                                           groups = groups\n",
    "                                           )\n",
    "\n",
    "head(data_train$horizon_4)  # View the horizon-4 dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::create_windows(window_length = 0)`\n",
    "\n",
    "* Train over all historical data without creating any external validation windows.\n",
    "\n",
    "\n",
    "* That dip in 1989 is not an aggregation error. There was a pilots' strike."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 360,
       "width": 720
      },
      "text/plain": {
       "height": 360,
       "width": 720
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "windows <- forecastML::create_windows(data_train, window_length = 0)\n",
    "\n",
    "plot(windows, data_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::train_model()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_fun <- function(data, outcome) {  # 'outcome' is not a required argument.\n",
    "\n",
    "  data <- data[complete.cases(data), ]  # With grouped data and feature lags, there will be NAs.\n",
    "\n",
    "  x <- model.matrix(as.formula(paste0(outcome, \"~ .\")), data)\n",
    "\n",
    "  y <- as.matrix(data[, outcome, drop = FALSE])\n",
    "\n",
    "  set.seed(224)\n",
    "  model <- glmnet::cv.glmnet(x, y)\n",
    "}\n",
    "\n",
    "model_week <- forecastML::train_model(data_train,\n",
    "                                         windows,\n",
    "                                         model_name = \"LASSO\",  # Can be any name.\n",
    "                                         model_function = model_fun,\n",
    "                                         outcome = \"passengers\"  # Passed in ...\n",
    "                                         )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::predict()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict_function <- function(model, data) {\n",
    "\n",
    "  x <- model.matrix(~ ., data)\n",
    "\n",
    "  data_pred <- data.frame(\"y_pred\" = predict(model, x))\n",
    "}\n",
    "\n",
    "data_forecast <- forecastML::create_lagged_df(data_week, type = \"forecast\", outcome_col = outcome_col,\n",
    "                                              lookback = lookback, horizon = horizons,\n",
    "                                              dates = dates, frequency = frequency,\n",
    "                                              groups = groups\n",
    "                                              )\n",
    "\n",
    "data_forecasts <- predict(model_week, prediction_function = list(predict_function), data = data_forecast)\n",
    "\n",
    "# Combine the short- and long-horizon direct forecasts.\n",
    "data_forecasts_week <- forecastML::combine_forecasts(data_forecasts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::plot()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 360,
       "width": 720
      },
      "text/plain": {
       "height": 360,
       "width": 720
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(data_forecasts_week)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## Forecast Reconciliation\n",
    "\n",
    "`reconcile_forecasts()` has very few restrictions on the input forecasts. Here they are:\n",
    "\n",
    "* The forecasts being reconciled must have a **column of dates or datetimes** (dates and times can be combined).\n",
    "\n",
    "\n",
    "* The date column, `index`, and column of forecasts, `outcome`, need to **have the same name across forecasts**.\n",
    "\n",
    "\n",
    "* The lowest frequency forecast--i.e., the forecast at the highest level of aggregation--provides the bookend date ranges for forecast reconciliation. **All lower-level forecasts--weekly in our example--need to be present within this date range**. Lower-level forecasts can be made for dates before or after this date range but they will not factor into the reconciliation. They can optionally be returned un-reconciled with `keep_non_reconciled = TRUE`. This functionality was added with ease of use in mind."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Renaming date and forecast columns to be the same across the weekly and monthly datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_forecasts_month$index <- as.Date(data_forecasts_month$index)\n",
    "\n",
    "names(data_forecasts_week)[names(data_forecasts_week) == \"forecast_period\"] <- \"index\"\n",
    "\n",
    "names(data_forecasts_week)[names(data_forecasts_week) == \"passengers_pred\"] <- \"passengers\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Creating a list of forecasts to reconcile\n",
    "\n",
    "* `reconcile_forecasts()` does not currently work with grouped hierarchical forecasts. So we'll split the forecasts into a list of 10 data.frames--1 for each airport--and reconcile forecasts 1 group at a time.\n",
    "\n",
    "\n",
    "* If you're reconciling multiple time series using an approach similar to below, make sure that the groups are in the same order prior to `dplyr::group_split()`! They're in the same order in this example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_reconcile_month <- data_forecasts_month %>%\n",
    "  dplyr::group_by(airports) %>%\n",
    "  dplyr::group_split(airports)\n",
    "\n",
    "data_reconcile_week <- data_forecasts_week %>%\n",
    "  dplyr::group_by(airports) %>%\n",
    "  dplyr::group_split(airports)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Here is the list of forecasts being reconciled for ADL-PER. The extra columns don't matter; both have the common columns \"index\" and \"passengers\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A tbl_ts: 4 × 5</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>airports</th><th scope=col>.model</th><th scope=col>index</th><th scope=col>passengers</th><th scope=col>.distribution</th></tr>\n",
       "\t<tr><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;date&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dist&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>ADL-PER</td><td>arima</td><td>1992-12-01</td><td>8601.110</td><td>N(8601, 5407865)</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>arima</td><td>1993-01-01</td><td>8623.424</td><td>N(8623, 7363186)</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>arima</td><td>1993-02-01</td><td>8636.841</td><td>N(8637, 8070171)</td></tr>\n",
       "\t<tr><td>ADL-PER</td><td>arima</td><td>1993-03-01</td><td>8644.910</td><td>N(8645, 8325795)</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A tbl\\_ts: 4 × 5\n",
       "\\begin{tabular}{lllll}\n",
       " airports & .model & index & passengers & .distribution\\\\\n",
       " <chr> & <chr> & <date> & <dbl> & <dist>\\\\\n",
       "\\hline\n",
       "\t ADL-PER & arima & 1992-12-01 & 8601.110 & N(8601, 5407865)\\\\\n",
       "\t ADL-PER & arima & 1993-01-01 & 8623.424 & N(8623, 7363186)\\\\\n",
       "\t ADL-PER & arima & 1993-02-01 & 8636.841 & N(8637, 8070171)\\\\\n",
       "\t ADL-PER & arima & 1993-03-01 & 8644.910 & N(8645, 8325795)\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A tbl_ts: 4 × 5\n",
       "\n",
       "| airports &lt;chr&gt; | .model &lt;chr&gt; | index &lt;date&gt; | passengers &lt;dbl&gt; | .distribution &lt;dist&gt; |\n",
       "|---|---|---|---|---|\n",
       "| ADL-PER | arima | 1992-12-01 | 8601.110 | N(8601, 5407865) |\n",
       "| ADL-PER | arima | 1993-01-01 | 8623.424 | N(8623, 7363186) |\n",
       "| ADL-PER | arima | 1993-02-01 | 8636.841 | N(8637, 8070171) |\n",
       "| ADL-PER | arima | 1993-03-01 | 8644.910 | N(8645, 8325795) |\n",
       "\n"
      ],
      "text/plain": [
       "  airports .model index      passengers .distribution   \n",
       "1 ADL-PER  arima  1992-12-01 8601.110   N(8601, 5407865)\n",
       "2 ADL-PER  arima  1993-01-01 8623.424   N(8623, 7363186)\n",
       "3 ADL-PER  arima  1993-02-01 8636.841   N(8637, 8070171)\n",
       "4 ADL-PER  arima  1993-03-01 8644.910   N(8645, 8325795)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A tibble: 20 × 6</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>model</th><th scope=col>model_forecast_horizon</th><th scope=col>horizon</th><th scope=col>airports</th><th scope=col>index</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;fct&gt;</th><th scope=col>&lt;date&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>LASSO</td><td> 1</td><td> 1</td><td>ADL-PER</td><td>1992-11-23</td><td>2942.520</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 4</td><td> 2</td><td>ADL-PER</td><td>1992-11-30</td><td>3320.056</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 4</td><td> 3</td><td>ADL-PER</td><td>1992-12-07</td><td>3115.462</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 4</td><td> 4</td><td>ADL-PER</td><td>1992-12-14</td><td>3123.974</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 8</td><td> 5</td><td>ADL-PER</td><td>1992-12-21</td><td>3053.807</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 8</td><td> 6</td><td>ADL-PER</td><td>1992-12-28</td><td>3263.941</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 8</td><td> 7</td><td>ADL-PER</td><td>1993-01-04</td><td>3137.612</td></tr>\n",
       "\t<tr><td>LASSO</td><td> 8</td><td> 8</td><td>ADL-PER</td><td>1993-01-11</td><td>3106.625</td></tr>\n",
       "\t<tr><td>LASSO</td><td>12</td><td> 9</td><td>ADL-PER</td><td>1993-01-18</td><td>2998.464</td></tr>\n",
       "\t<tr><td>LASSO</td><td>12</td><td>10</td><td>ADL-PER</td><td>1993-01-25</td><td>3134.010</td></tr>\n",
       "\t<tr><td>LASSO</td><td>12</td><td>11</td><td>ADL-PER</td><td>1993-02-01</td><td>3004.158</td></tr>\n",
       "\t<tr><td>LASSO</td><td>12</td><td>12</td><td>ADL-PER</td><td>1993-02-08</td><td>2978.444</td></tr>\n",
       "\t<tr><td>LASSO</td><td>16</td><td>13</td><td>ADL-PER</td><td>1993-02-15</td><td>2908.999</td></tr>\n",
       "\t<tr><td>LASSO</td><td>16</td><td>14</td><td>ADL-PER</td><td>1993-02-22</td><td>3073.993</td></tr>\n",
       "\t<tr><td>LASSO</td><td>16</td><td>15</td><td>ADL-PER</td><td>1993-03-01</td><td>3096.509</td></tr>\n",
       "\t<tr><td>LASSO</td><td>16</td><td>16</td><td>ADL-PER</td><td>1993-03-08</td><td>3063.370</td></tr>\n",
       "\t<tr><td>LASSO</td><td>20</td><td>17</td><td>ADL-PER</td><td>1993-03-15</td><td>2981.404</td></tr>\n",
       "\t<tr><td>LASSO</td><td>20</td><td>18</td><td>ADL-PER</td><td>1993-03-22</td><td>3134.639</td></tr>\n",
       "\t<tr><td>LASSO</td><td>20</td><td>19</td><td>ADL-PER</td><td>1993-03-29</td><td>3078.839</td></tr>\n",
       "\t<tr><td>LASSO</td><td>20</td><td>20</td><td>ADL-PER</td><td>1993-04-05</td><td>3157.005</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A tibble: 20 × 6\n",
       "\\begin{tabular}{llllll}\n",
       " model & model\\_forecast\\_horizon & horizon & airports & index & passengers\\\\\n",
       " <chr> & <dbl> & <dbl> & <fct> & <date> & <dbl>\\\\\n",
       "\\hline\n",
       "\t LASSO &  1 &  1 & ADL-PER & 1992-11-23 & 2942.520\\\\\n",
       "\t LASSO &  4 &  2 & ADL-PER & 1992-11-30 & 3320.056\\\\\n",
       "\t LASSO &  4 &  3 & ADL-PER & 1992-12-07 & 3115.462\\\\\n",
       "\t LASSO &  4 &  4 & ADL-PER & 1992-12-14 & 3123.974\\\\\n",
       "\t LASSO &  8 &  5 & ADL-PER & 1992-12-21 & 3053.807\\\\\n",
       "\t LASSO &  8 &  6 & ADL-PER & 1992-12-28 & 3263.941\\\\\n",
       "\t LASSO &  8 &  7 & ADL-PER & 1993-01-04 & 3137.612\\\\\n",
       "\t LASSO &  8 &  8 & ADL-PER & 1993-01-11 & 3106.625\\\\\n",
       "\t LASSO & 12 &  9 & ADL-PER & 1993-01-18 & 2998.464\\\\\n",
       "\t LASSO & 12 & 10 & ADL-PER & 1993-01-25 & 3134.010\\\\\n",
       "\t LASSO & 12 & 11 & ADL-PER & 1993-02-01 & 3004.158\\\\\n",
       "\t LASSO & 12 & 12 & ADL-PER & 1993-02-08 & 2978.444\\\\\n",
       "\t LASSO & 16 & 13 & ADL-PER & 1993-02-15 & 2908.999\\\\\n",
       "\t LASSO & 16 & 14 & ADL-PER & 1993-02-22 & 3073.993\\\\\n",
       "\t LASSO & 16 & 15 & ADL-PER & 1993-03-01 & 3096.509\\\\\n",
       "\t LASSO & 16 & 16 & ADL-PER & 1993-03-08 & 3063.370\\\\\n",
       "\t LASSO & 20 & 17 & ADL-PER & 1993-03-15 & 2981.404\\\\\n",
       "\t LASSO & 20 & 18 & ADL-PER & 1993-03-22 & 3134.639\\\\\n",
       "\t LASSO & 20 & 19 & ADL-PER & 1993-03-29 & 3078.839\\\\\n",
       "\t LASSO & 20 & 20 & ADL-PER & 1993-04-05 & 3157.005\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A tibble: 20 × 6\n",
       "\n",
       "| model &lt;chr&gt; | model_forecast_horizon &lt;dbl&gt; | horizon &lt;dbl&gt; | airports &lt;fct&gt; | index &lt;date&gt; | passengers &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|\n",
       "| LASSO |  1 |  1 | ADL-PER | 1992-11-23 | 2942.520 |\n",
       "| LASSO |  4 |  2 | ADL-PER | 1992-11-30 | 3320.056 |\n",
       "| LASSO |  4 |  3 | ADL-PER | 1992-12-07 | 3115.462 |\n",
       "| LASSO |  4 |  4 | ADL-PER | 1992-12-14 | 3123.974 |\n",
       "| LASSO |  8 |  5 | ADL-PER | 1992-12-21 | 3053.807 |\n",
       "| LASSO |  8 |  6 | ADL-PER | 1992-12-28 | 3263.941 |\n",
       "| LASSO |  8 |  7 | ADL-PER | 1993-01-04 | 3137.612 |\n",
       "| LASSO |  8 |  8 | ADL-PER | 1993-01-11 | 3106.625 |\n",
       "| LASSO | 12 |  9 | ADL-PER | 1993-01-18 | 2998.464 |\n",
       "| LASSO | 12 | 10 | ADL-PER | 1993-01-25 | 3134.010 |\n",
       "| LASSO | 12 | 11 | ADL-PER | 1993-02-01 | 3004.158 |\n",
       "| LASSO | 12 | 12 | ADL-PER | 1993-02-08 | 2978.444 |\n",
       "| LASSO | 16 | 13 | ADL-PER | 1993-02-15 | 2908.999 |\n",
       "| LASSO | 16 | 14 | ADL-PER | 1993-02-22 | 3073.993 |\n",
       "| LASSO | 16 | 15 | ADL-PER | 1993-03-01 | 3096.509 |\n",
       "| LASSO | 16 | 16 | ADL-PER | 1993-03-08 | 3063.370 |\n",
       "| LASSO | 20 | 17 | ADL-PER | 1993-03-15 | 2981.404 |\n",
       "| LASSO | 20 | 18 | ADL-PER | 1993-03-22 | 3134.639 |\n",
       "| LASSO | 20 | 19 | ADL-PER | 1993-03-29 | 3078.839 |\n",
       "| LASSO | 20 | 20 | ADL-PER | 1993-04-05 | 3157.005 |\n",
       "\n"
      ],
      "text/plain": [
       "   model model_forecast_horizon horizon airports index      passengers\n",
       "1  LASSO  1                      1      ADL-PER  1992-11-23 2942.520  \n",
       "2  LASSO  4                      2      ADL-PER  1992-11-30 3320.056  \n",
       "3  LASSO  4                      3      ADL-PER  1992-12-07 3115.462  \n",
       "4  LASSO  4                      4      ADL-PER  1992-12-14 3123.974  \n",
       "5  LASSO  8                      5      ADL-PER  1992-12-21 3053.807  \n",
       "6  LASSO  8                      6      ADL-PER  1992-12-28 3263.941  \n",
       "7  LASSO  8                      7      ADL-PER  1993-01-04 3137.612  \n",
       "8  LASSO  8                      8      ADL-PER  1993-01-11 3106.625  \n",
       "9  LASSO 12                      9      ADL-PER  1993-01-18 2998.464  \n",
       "10 LASSO 12                     10      ADL-PER  1993-01-25 3134.010  \n",
       "11 LASSO 12                     11      ADL-PER  1993-02-01 3004.158  \n",
       "12 LASSO 12                     12      ADL-PER  1993-02-08 2978.444  \n",
       "13 LASSO 16                     13      ADL-PER  1993-02-15 2908.999  \n",
       "14 LASSO 16                     14      ADL-PER  1993-02-22 3073.993  \n",
       "15 LASSO 16                     15      ADL-PER  1993-03-01 3096.509  \n",
       "16 LASSO 16                     16      ADL-PER  1993-03-08 3063.370  \n",
       "17 LASSO 20                     17      ADL-PER  1993-03-15 2981.404  \n",
       "18 LASSO 20                     18      ADL-PER  1993-03-22 3134.639  \n",
       "19 LASSO 20                     19      ADL-PER  1993-03-29 3078.839  \n",
       "20 LASSO 20                     20      ADL-PER  1993-04-05 3157.005  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_reconcile_month[[1]]\n",
    "\n",
    "data_reconcile_week[[1]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### `forecastML::reconcile_forecasts()`\n",
    "\n",
    "* The return value is either (a) a list of reconciled forecasts with `length(forecasts)` if `keep_all = TRUE` or (b) the bottom-level forecast at the most disaggregated level if `keep_all = FALSE`.\n",
    "\n",
    "\n",
    "* If you look closely at the lists above, you'll see that there are 2 weekly forecasts in November 1992 that occur before the bookend forecast start date of our highest level forecast--1992-12-01. These forecasts, correctly, are not included in the forecast reconciliation, but they can be returned with the reconciled forecasts if `keep_non_reconciled = TRUE`. There's also an extra forecast for 1993-04-05 and the same rules apply here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<dl>\n",
       "\t<dt>$`1 week`</dt>\n",
       "\t\t<dd><table>\n",
       "<caption>A data.frame: 17 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>index</th><th scope=col>passengers</th><th scope=col>airports</th></tr>\n",
       "\t<tr><th scope=col>&lt;date&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;chr&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>1992-12-07</td><td>2620.952</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1992-12-14</td><td>2629.465</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1992-12-21</td><td>2559.297</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1992-12-28</td><td>2769.431</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-01-04</td><td>2668.451</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-01-11</td><td>2637.464</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-01-18</td><td>2529.303</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-01-25</td><td>2664.849</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-02-01</td><td>2588.064</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-02-08</td><td>2562.350</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-02-15</td><td>2492.905</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-02-22</td><td>2657.899</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-01</td><td>2425.524</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-08</td><td>2392.385</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-15</td><td>2310.419</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-22</td><td>2463.654</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-29</td><td>2407.854</td><td>ADL-PER</td></tr>\n",
       "</tbody>\n",
       "</table>\n",
       "</dd>\n",
       "\t<dt>$`1 month`</dt>\n",
       "\t\t<dd><table>\n",
       "<caption>A data.frame: 4 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>index</th><th scope=col>passengers</th><th scope=col>airports</th></tr>\n",
       "\t<tr><th scope=col>&lt;date&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;chr&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>1992-12-01</td><td>10579.15</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-01-01</td><td>10500.07</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-02-01</td><td>10301.22</td><td>ADL-PER</td></tr>\n",
       "\t<tr><td>1993-03-01</td><td>11999.83</td><td>ADL-PER</td></tr>\n",
       "</tbody>\n",
       "</table>\n",
       "</dd>\n",
       "</dl>\n"
      ],
      "text/latex": [
       "\\begin{description}\n",
       "\\item[\\$`1 week`] A data.frame: 17 × 3\n",
       "\\begin{tabular}{lll}\n",
       " index & passengers & airports\\\\\n",
       " <date> & <dbl> & <chr>\\\\\n",
       "\\hline\n",
       "\t 1992-12-07 & 2620.952 & ADL-PER\\\\\n",
       "\t 1992-12-14 & 2629.465 & ADL-PER\\\\\n",
       "\t 1992-12-21 & 2559.297 & ADL-PER\\\\\n",
       "\t 1992-12-28 & 2769.431 & ADL-PER\\\\\n",
       "\t 1993-01-04 & 2668.451 & ADL-PER\\\\\n",
       "\t 1993-01-11 & 2637.464 & ADL-PER\\\\\n",
       "\t 1993-01-18 & 2529.303 & ADL-PER\\\\\n",
       "\t 1993-01-25 & 2664.849 & ADL-PER\\\\\n",
       "\t 1993-02-01 & 2588.064 & ADL-PER\\\\\n",
       "\t 1993-02-08 & 2562.350 & ADL-PER\\\\\n",
       "\t 1993-02-15 & 2492.905 & ADL-PER\\\\\n",
       "\t 1993-02-22 & 2657.899 & ADL-PER\\\\\n",
       "\t 1993-03-01 & 2425.524 & ADL-PER\\\\\n",
       "\t 1993-03-08 & 2392.385 & ADL-PER\\\\\n",
       "\t 1993-03-15 & 2310.419 & ADL-PER\\\\\n",
       "\t 1993-03-22 & 2463.654 & ADL-PER\\\\\n",
       "\t 1993-03-29 & 2407.854 & ADL-PER\\\\\n",
       "\\end{tabular}\n",
       "\n",
       "\\item[\\$`1 month`] A data.frame: 4 × 3\n",
       "\\begin{tabular}{lll}\n",
       " index & passengers & airports\\\\\n",
       " <date> & <dbl> & <chr>\\\\\n",
       "\\hline\n",
       "\t 1992-12-01 & 10579.15 & ADL-PER\\\\\n",
       "\t 1993-01-01 & 10500.07 & ADL-PER\\\\\n",
       "\t 1993-02-01 & 10301.22 & ADL-PER\\\\\n",
       "\t 1993-03-01 & 11999.83 & ADL-PER\\\\\n",
       "\\end{tabular}\n",
       "\n",
       "\\end{description}\n"
      ],
      "text/markdown": [
       "$`1 week`\n",
       ":   \n",
       "A data.frame: 17 × 3\n",
       "\n",
       "| index &lt;date&gt; | passengers &lt;dbl&gt; | airports &lt;chr&gt; |\n",
       "|---|---|---|\n",
       "| 1992-12-07 | 2620.952 | ADL-PER |\n",
       "| 1992-12-14 | 2629.465 | ADL-PER |\n",
       "| 1992-12-21 | 2559.297 | ADL-PER |\n",
       "| 1992-12-28 | 2769.431 | ADL-PER |\n",
       "| 1993-01-04 | 2668.451 | ADL-PER |\n",
       "| 1993-01-11 | 2637.464 | ADL-PER |\n",
       "| 1993-01-18 | 2529.303 | ADL-PER |\n",
       "| 1993-01-25 | 2664.849 | ADL-PER |\n",
       "| 1993-02-01 | 2588.064 | ADL-PER |\n",
       "| 1993-02-08 | 2562.350 | ADL-PER |\n",
       "| 1993-02-15 | 2492.905 | ADL-PER |\n",
       "| 1993-02-22 | 2657.899 | ADL-PER |\n",
       "| 1993-03-01 | 2425.524 | ADL-PER |\n",
       "| 1993-03-08 | 2392.385 | ADL-PER |\n",
       "| 1993-03-15 | 2310.419 | ADL-PER |\n",
       "| 1993-03-22 | 2463.654 | ADL-PER |\n",
       "| 1993-03-29 | 2407.854 | ADL-PER |\n",
       "\n",
       "\n",
       "$`1 month`\n",
       ":   \n",
       "A data.frame: 4 × 3\n",
       "\n",
       "| index &lt;date&gt; | passengers &lt;dbl&gt; | airports &lt;chr&gt; |\n",
       "|---|---|---|\n",
       "| 1992-12-01 | 10579.15 | ADL-PER |\n",
       "| 1993-01-01 | 10500.07 | ADL-PER |\n",
       "| 1993-02-01 | 10301.22 | ADL-PER |\n",
       "| 1993-03-01 | 11999.83 | ADL-PER |\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "$`1 week`\n",
       "        index passengers airports\n",
       "1  1992-12-07   2620.952  ADL-PER\n",
       "2  1992-12-14   2629.465  ADL-PER\n",
       "3  1992-12-21   2559.297  ADL-PER\n",
       "4  1992-12-28   2769.431  ADL-PER\n",
       "5  1993-01-04   2668.451  ADL-PER\n",
       "6  1993-01-11   2637.464  ADL-PER\n",
       "7  1993-01-18   2529.303  ADL-PER\n",
       "8  1993-01-25   2664.849  ADL-PER\n",
       "9  1993-02-01   2588.064  ADL-PER\n",
       "10 1993-02-08   2562.350  ADL-PER\n",
       "11 1993-02-15   2492.905  ADL-PER\n",
       "12 1993-02-22   2657.899  ADL-PER\n",
       "13 1993-03-01   2425.524  ADL-PER\n",
       "14 1993-03-08   2392.385  ADL-PER\n",
       "15 1993-03-15   2310.419  ADL-PER\n",
       "16 1993-03-22   2463.654  ADL-PER\n",
       "17 1993-03-29   2407.854  ADL-PER\n",
       "\n",
       "$`1 month`\n",
       "       index passengers airports\n",
       "1 1992-12-01   10579.15  ADL-PER\n",
       "2 1993-01-01   10500.07  ADL-PER\n",
       "3 1993-02-01   10301.22  ADL-PER\n",
       "4 1993-03-01   11999.83  ADL-PER\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_reconciled <- vector(\"list\", length(airport_list))\n",
    "\n",
    "for (i in seq_along(airport_list)) {\n",
    "\n",
    "  forecasts <- list(data_reconcile_week[[i]], data_reconcile_month[[i]])\n",
    "\n",
    "  frequency <- c(\"1 week\", \"1 month\")\n",
    "\n",
    "  data_reconciled[[i]] <- forecastML::reconcile_forecasts(forecasts,\n",
    "                                                          frequency = frequency,\n",
    "                                                          index = \"index\",  # Date column.\n",
    "                                                          outcome = \"passengers\",  # Forecast column.\n",
    "                                                          method = \"temporal\",\n",
    "                                                          keep_all = TRUE,  # FALSE returns weekly.\n",
    "                                                          keep_non_reconciled = FALSE\n",
    "                                                          )\n",
    "    \n",
    "  # We'll add the airport to the list of weekly and monthly forecasts for plotting.\n",
    "  data_reconciled[[i]] <- lapply(data_reconciled[[i]], function(x) {x$airports <- airport_list[i]; x})\n",
    "}\n",
    "\n",
    "# Reconciled forecasts for ADL-PER.\n",
    "data_reconciled[[1]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check that the forecast reconciliation is working as intended\n",
    "\n",
    "* These values should be equal if `keep_non_reconciled = FALSE`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "43380.2669709045"
      ],
      "text/latex": [
       "43380.2669709045"
      ],
      "text/markdown": [
       "43380.2669709045"
      ],
      "text/plain": [
       "[1] 43380.27"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "43380.2669709045"
      ],
      "text/latex": [
       "43380.2669709045"
      ],
      "text/markdown": [
       "43380.2669709045"
      ],
      "text/plain": [
       "[1] 43380.27"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ADL-PER\n",
    "sum(data_reconciled[[1]][[\"1 month\"]]$passengers)\n",
    "\n",
    "sum(data_reconciled[[1]][[\"1 week\"]]$passengers)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Custom plot - Forecasts vs. reconciled forecasts\n",
    "\n",
    "* The cell below has some boilerplate code for combining the historical data, forecasts, and reconciled forecasts for creating a custom plot. There is currently no `plot()` method in `forecastML` that does this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------\n",
    "data_reconciled <- dplyr::bind_rows(unlist(data_reconciled, recursive = FALSE), .id = \"frequency\")\n",
    "data_reconciled$reconciled <- \"Reconciled\"\n",
    "#----------\n",
    "data_forecasts_week$frequency <- frequency[1]\n",
    "data_forecasts_month$frequency <- frequency[2]\n",
    "\n",
    "data_forecasts <- dplyr::bind_rows(data_forecasts_week, data_forecasts_month)\n",
    "data_forecasts$reconciled <- \"Not reconciled\"\n",
    "#----------\n",
    "data_week$index <- dates\n",
    "\n",
    "data_week$frequency <- frequency[1]\n",
    "data_month$frequency <- frequency[2]\n",
    "\n",
    "data_history <- dplyr::bind_rows(data_week, data_month)\n",
    "\n",
    "data_history$reconciled <- \"Historical\"\n",
    "#----------\n",
    "data_plot <- dplyr::bind_rows(data_forecasts, data_reconciled, data_history)\n",
    "\n",
    "data_plot <- dplyr::filter(data_plot, lubridate::year(index) >= 1992)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABaAAAALQCAMAAABR+ye1AAAAgVBMVEUAAAAAsPYAv30Av8Qa\nGhozMzM5tgBNTU1oaGh8fHyDg4OMjIyVkP+VlZWampqjo6OjpQCnp6evr6+ysrK5ubm9vb3B\nwcHHx8fJycnQ0NDR0dHYkADY2NjZ2dne3t7h4eHk5OTna/Pp6enq6urr6+vv7+/w8PD19fX4\ndm3/Yrz///+D8enbAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nOydC2OjNhaFiTM7\n2EmaiZtm0jTrZuO6nhn+/w9cS7z0uJKuXljAPbvNYBAHAldf5IskqoZEIpFIRaq69gmQSCQS\nCRYBmkQikQoVAZpEIpEKFQGaRCKRChUBmkQikQoVAZpEIpEKFQGaRCKRChUBmkQikQrVVID+\nD4nUiaKKlF7poqooTQboA4nElRLQ1/5dSKWIAB0nqkqkTgRoUnoRoONEVYnUiQBNSi8CdJyo\nKpE6EaBJ6UWAjhNVJVInAjQpvQjQcaKqROpEgCalFwE6TlSVSJ0I0KT0IkDHiaoSqRMBmpRe\nBOg4UVUidSJAk9KLAB0nqkqkTgRoUnoRoOO0rqr0JUPJxYgAHSNMwKwwqAjQkVpVVfqCqyFf\nDqusSwToCKFCa4VBRYCO1Jqq0hdkDSFAU1R5ChdaKwwqAnSk1lWVvowLX1ib50vb8PnS/juu\n/NIvr0kE6Bh9Ef/tf3xRA+ywOkoToOO0rqo0AvrL8EOsTuPnL+trRhOgYyQC+ovwUwqww9pi\nigAdq3VVpS/SAlR/pHq0rspEgI6RGFpfuigCAmtdIXUgQMdqXVWJAG0RATpGIKC/fBmSZl/6\n9SsTATpO66pKBGiLCNAxEh9vHEZGS9u+rJDQBOg4rasqEaAtIkDHCAXow9piigAdq3VVJQK0\nRQToGH1RlsQgooeEyxMBOodgQKu9oL58+UKApqjyEwRo6mZHgI7VCqsSCRYBmpReBOg4UVUi\ndSJAk9KLAB0nqkqkTgRoUnoRoONEVYnUiQBNSi8CdJyoKpE6EaBJ6UWAjhNVJVInAjQpvQjQ\ncaKqROpEgCalFwE6TlSVSJ0I0KT0IkDHiaoSqRMBmpReBOg4/YdE6kRRRUqvdFFVlCYDtGH9\nKetR5+w+b3uLe0pA+x89gebsPm/7aaKqKBGgS3Wftz0Bukz3edsToLOJqtK67AnQZbrP254A\nnU1UldZlT4Au033e9gTobKKqtC57AnSZ7vO2J0BnE1WlddkToMt0n7c9ATqbqCqty54AXab7\nvO0J0NlEVWld9gToMt3nbU+AziaqSuuyJ0CX6T5vewJ0NlFVWpc9AbpM93nbE6CziarSuuwJ\n0GW6z9ueAJ1NVJXWZU+ALtN93vYE6GyiqrQuewJ0me7ztidAZxNVpXXZE6DLdJ+3PQE6m6gq\nrcueAF2m+7ztCdDZRFVpXfYE6DLd521PgM4mqkrrsidAl+k+b3sCdDZRVVqXPQG6TPd52xOg\ns4mq0rrsCdBlus/bngCdTVSV1mVPgC7Tfd72BOhsoqq0LnsCdJnu87YnQGcTVaV12ROgy3Sf\ntz0BOpuoKq3LngBdpvu87QnQ2URVaV32BOgy3edtT4DOJqpK67InQJfpPm97AnQ2UVValz0B\nukz3edsToLOJqtK67AnQZbrP254AnU1rrEq3ee0jVUhV+vFHXf/xT7v8/a6++/4DtwhYGY4e\neRsc7sk169teSlQtRwTofO4EaFByKNzVTJzQ3/jib6hFyMpwdAL0YuwJ0Nm0QkDfRqJhFVXp\ne/0H+/H7ZfF/9d0/zT939f8Qi5CV6egEaPEarCKqFiQCdDZ3AjQsKRTuapaxqOuGYfrvy8//\n1n8iFiEr09EJ0ATo+YoAnc39NpINK6pK9d3lx+/1v5ef/7DWtHPRbKUd/ZYATYCerwjQudxv\nGwI0KD0Uvtd/NV0zuv3HuWi00o8e+0XG7p5eOdxvCdBzFQE6lzsB2iA1FP5b19/Zv56A/g/T\nya3by//WrhVcAwJ0nNYJ6ChCrwXQf/1+x9PK1ILO5i5cg7VE1VJEgM7kfiv8zGAfr5Kq0h8s\nx0GAzuZOgJ6tCNCZ3AnQJgGh8IM9Jbwb+etcNFtpR58toG+Z0ngSoGcrAnQm91vpn+T28Sqq\nKjHotp00/h37a1gWLVbq0WcJ6J7NaU5d7E+0pqhaggjQedxvlX8T2ydQGVWp7Qf9Lxse+Cfv\n5vw3e2LoXISs4KPHdna0u2dQC+juAwEa606AjtNaAR1RxVZRlfhIwh+/sxx0npGEswR0gugR\nJXYoWkVULUgE6DzuBGijoLk4vrHF3zwWISvw6ARoAvScRYDO4n4LLCW0T6FSqtL3u/q3v/jS\nDz5ZHW4RtIKOPm9Apzl3AvR8RYDO4n4LLiazT6ElVCUcoFMTmgBt1hKiqigRoLO4E6DNmwjQ\nLvcU0SNI6g9CUTUvEaBzuN8aPySxT6IlVCUCtEm36jIBep4iQOdwJ0AToCPcCdD+7gToOBGg\nE9on0RKqkjuqEg73ANxzKBGgNY/bwT6nlhBVRYkAncH91vox2j6NllCVlglorfXrr1sd8gTo\nWYoAncGdAE2AjnBPDGh50gGKqnmJAJ3BnQBNgI5wTwJobbALAXqWIkCnd9cqVVgto6rk1PIB\nHXjuBOiliACd3p0AXRigExM685WTTzYY0OqESwToWYoAnd5dr1NBtYyqklMEaFjS9wYC9JxF\ngE7uDlQpArSgKQEtwymR5gVoJdVBUTUvEaCTuxOg7e4EaLt7KkCr3x4I0HMUATq5O1SlQqoZ\nVSWnlgjoFF2ACNCLEQE6tTtYowjQowjQVk0P6JRXZwlRVZQI0Knd4XAPqAQEaKeiAV1g7ikd\noJU+hgToOYoAndqdAO1wJ0BblQDQUv8NAvSsRYBO7G6IdgL0oKIAXVzu6VZ1DzhDEdDqnBz6\nyQddA5OWEFVFiQCd2N0U7f61gADtlCuqlK7Amm6DWo+zAbQ0oNAM6JRN6CVEVVEiQCd2J0C7\n3K8AaPP3GgI0AbpoEaDTuifMdhKgnSJAwx7CEgF63iJAp3U3x7p3LSBAOxUP6NIeDtxq7v4n\nKDHZCeiwa2DSEqKqKBGg07oToJ3u5QD61rjFqjkB+lZdT4CelwjQSd1toe5bDQjQThGgYQ/L\nMgF6XiJAJ3UnQLvdCdAW5QQ0/wAB2nYMz8MvIaqKEgE6qTsB2u0+HaDFh2WQbs2bbMp45W51\n9zhAaxtAewJ0sSJAp3S3R3NRsb6IqhQH6FvzJqsKB7T9MYgnoMtqVRCgs4kATYDuRIA2ypiD\n8DXB2xOgyxYB2iJHdPoC2jPaCdBOpQB0Sd1rCNDB7gToOP3nNEPd3nqWj9y+Dl0D0CBoCNDO\nbxEFXRuHOwE6TvNsQdvj07sqUQuaqRRA35o32ZXtyhn7wfm7GDeBgDbuU861cbkToOM0T0Db\nA9S/KnnFOwHaKQK0ycW4yQvQJeXnHe4E6DjNEdCuLvz+z9sJ0E15gC4mz3oLu3t+L3P09CRA\nz0sEaLNc4xgCOkT5RDwB2il7VBkHbCir5g1oNQ9nBfStUtrxLYIAfXURoM0iQGdxJ0AblB/Q\nzF6CtB3Q/nxeRFQVJQK0WY4eSAToMPdCAO3o4mFRpit3a3B3dq6HG8UGnaQyBOjSRYA2yzWQ\nAU7nYTxRIkA7tQpAu7LKAYDWwEyALlUEaLMI0FncCdCwQgCtf8lz/S7S81M91+FjZbHPJAJ0\nNs0Q0M5uWAToIPerAFq/8KUBuj+JaQCtFiZAFyoCtFGegEaGMz7qCdBORQDai2qQe2qFABro\nJIcFtIJ220NUHy0hqooSAdoo51N+AnSQ+1SAtqdmSwP0cAoegIaaEOgWtJy9JkAXKgK0UXkA\njY97ArRTBGi1gPM3Ge319xUiD4uzzyECdDbNGdCmUDWk89C2DhGgnVo3oKEWhAegpR7U1oeo\nHlpCVBUlArRRzrAnQAe5T/jKK0G3Ph/tynHlxhMIALS7LTFKtDemRm61IYdYLSGqihIB2iR3\nYi8M0OiSBGin0gHaB0iFABpqQLh/CdPJjxahbLbapxEBOpvmDWg48E2NER9jiwjQTiUDNF+F\nJdPUgDZETB5AR8DZZp9GBOhsIkB7lyVAO5UU0Ma1CPdoEaAj3QnQcZo5oMG4JUAHuZcAaHda\n16IMV044LhbQYAouGtCRfF5EVBUlArRJXoD2imsCdCr5RBWq28ZMAe2BVwL0vESANsn9nTgU\n0Ff8Jj2Z/UwBjbo1iwR0u28snxcRVUWJAG2QFqp67BKgg9wJ0NajIgENfsEjQMOqeoUe+KUO\n3TNWBGiDvADtGdcE6EQKBbTlBsQwLliJAB311+UWaRBon0RXA3T4nrEiQBukx6q2JhjQV0t1\nTmdPgPZRNKDx7d+VAjrywAToPCJAX8ueAO0h6Zg4QKurkgA6ns+FRpXI1+NjVT0e+cqPetc0\nZ/b5zLfcV/WeLRzuq27pua62L20LPPrkw0SANghRKU6mDUHumgjQTnlFFdRv2F7Mxz1GLkAj\nWgvo9u/aAX2uGW3rM1u5qx6bhn/eDlvum+atTYdcCL3nCy8E6FwiQF/LvmhAW6/+WgGtvX02\nSGVGlZCC3leXVvOO0ZcjuHluQfzCfjw2B1ZmW702zQdbqqrjZVVNKY5cSgtodR0BOsi9cEC7\n700BgAaJTYA2SQD09sLc5siazIy+7DMvcM+Wzn3549vzjpWuq8e3ziDB2QeJAA0LDlZ57Qlc\nG+MP2mdSmVXJT35Rdast2IuZlPrKwVFlLgGtSAFozO7h9pndsSmOdrFtHrdLPbvHQrt+1Vtd\nVdtjQ4DOJQL0texnDGjnvbkCoMFngsqa2M6b1sQ8tnldZlT5Afqx2r68HduPH9uqPhCgcyk1\noOEvo0FNjyukOqe0LxnQrktfHqAbZao98AFJzt71ywG0mOJoP49bzkLpc7/Pi9y6nloEaFge\ngA77akiATiDPqMKOt3MUSHzlTE829ILWrwBZ50pdDqDFh4Tt58viK1vJlrpHg4fm3OWgD5dV\n9JAwm5IDGhpSQID2cydAW49mc7d9B8hK0OUAWuxmN36uPi7N6r7D3X7IerRLz6zstcZ6E6Bh\nGeNR2BAF6Ct0FpjSftaAdrRGrwforix4dnkJes2XGaDcQwaqDJ93B7b0seu28DVtp7y6qi98\nbl4I0FkU7G6ORg3QoQ+/CdDx8o0q9Hg7a6ErArr90xHT32KVgJ6xCNCgLNE4biJAB7nPAtC2\nUmmvnHH4k7k8AVoXATpOBGifYwj22bSEquQdVR7tTzORrgvoyAElBOh5iQANytonVHIPry0E\n6GjlBLS54JUBHTeihAA9LxGgQU0B6Ik7C0xrXy6g8TesVEBHiQA9LxGgQVmjsd9IgA5yvyag\n0eM52rK+7iEiQONFgM6meQEaNxb45C7p8JmyN9e09gTo0KOUedsJ0FcSARrSRICetDfXtPYE\n6NCjFHrbkYReQlQVJQI0JNxsDQkAPV1vrontSwW0zw2bBNDaQQq97QTo64gADQkN6Fg+T9eb\na2J7AnToQQq97QTo64gADQk3W0MSQE/1TXpi+2IB7SECtCAC9HVEgIY0KaBNJoXW1Gh3ArT1\nIIXedgL0dUSAhoSYToe7J+GzKc1RaE2NdidAWw9S6G0nQF9HBGhAmFC8TQho+IiF1tRo99kA\nepKvNgRoDxGgs4kA7X3IQmtqtDsB2nqMUm87jtBLiKqiRIAGhJyQ8pSOz1Cao9SaGutOgLYe\no9TbToC+igjQgK4B6NmMWIh2J0Bbj1HqbSdAX0UEaEDIGYMTA9pv5vZoLaEqEaC9RYCelwjQ\ngJCATsxn1bHUmhrrToC2HqPU206AvooI0Lqw4E0OaNmy1Joa606Ath6i1Nu+fEBX1Vu/IG94\ni/fuXOG3g9veGU6A1oUFb45zF45dak2NdSdAWw9R6m1fA6DrfkFav00DSQJ0KvdrAlpIc5Ra\nU2PdCdDWQ5R629cA6Oq5W1DWx3tbrQjQfroqoJX3AeTTnKuSy4oAbVS4PYrQc46qqtpWx3ZB\nWR/vbbUiQPvpyoAWp5vOqDlXJZcVAdqopICe+uwtQ8OSAPqjum8X2M+XbbV94Z+qkaBVdd7y\nQpet9Uu7bl9XOw72YZdLseN9VT9Lm8cUh7zvngDtqWsDuktzFFtTI90J0NZDFHvbdUADyM4O\naFMz3hFVFSylTPNYHZoOozteYKcB+r66ILW577d2BeuzuAtLZ1ddxmTYPABa3feeAO0ldOeM\njOd+m9e+yW4/EaBPWXWb136iQ6TShY3aiqlP33zINIA+V9t2oXmt6o/mo65e5QzEBawMxW/s\nn/OOdft4ZYuPDNrSLpeVL8xs3NwDWtq33YMA7aMSAN1O9ZFViwC0/9F9RC1oUVrj9Xb6FrQ5\nD54G0BeovrQL97zP3VvbhBbLsCb2ZSvD9JklO+7ZmjPrACLt0rfEx809oNV9L3sQoH1UBKAv\n0V9sTY10J0BbD1HsbZ81oDHinNxe8Cl0iFP7xg2rB8KL6Q9lF31z+5+675wAfasq6qgzBnSW\ncTCiCNBOEaBFqZURrJ55z94ChFSAPlSPBGhBTh5HYYoAbRYB2qn8gJ7VLLNK9QQrbHZAmzal\nAnRzX31gAK2uaTwAbXHTTyr0t/FUeFWKaUTPGtCp52JS7a/lToC2HoEAjT4DUckAfay2Yg76\nHgT0fTUM/95pOeh7EdA7IAc97NsuHuYN6JimZEi44I9GgA5ynw+gDbFAgO4+TQ1oW8ozGaCb\n50rrxXFUy/CtzQtj8QvrlLHXenH0hcfNPaCFfd8W0osjmFQEaIv9tdwJ0NYDzAjQQIs2N6CN\n29IBuqnlftDNdpikYyzTbq2Pjakf9FBY7wct7Mu7RD/OHtDBhCZAW+yv5U6Ath6AAG3E8ESA\n7rq9vdTdsMDDVgc0Gw1YPbYt631V3XcjCethJOH4s98sjSTs931eyEjCwET0vAGd9zEhAdot\nArQoiY+32QBtTGRYO3XRfNBxiq5KQbAiQNvsr+ROgLYeYD6Ahpq08Wdv7l1r7XRLgI5TfFUK\noRUB2mZ/JXcCtPUA5QJaImQuQFuGPxCgMypBVQrAFQHaZn8ldwK09QDzAHQHUY2ZsWdvyJwI\nhzSIAB2nFFXJPxEdEC4ex8hflXISmgDtFgFakgxoZU28fdNDGEbxrXX2AwJ0nNJUJV9gEaCt\n9tdxJ0BbDzAjQAPJiLizvzVxv1tJgM6mRFXJk1gEaKv9ddwJ0Fb/WQD6NgegRztwzgcCdE6l\nqkp+yCJAW+2v406AtvrPBdBNFkCrS/LBCdDZlKwqeSWi5w7onIQmQLtFgJaUF9BaHxF9MwE6\nmxJWpbwIJUDndidAW/3nAGghV5wM0Ld2QN8SoLMqZVXK2REuc/vcRwRopwjQ3oqyV3PECQEt\nW+nGfAUBOpuSViU0tmYP6IyEJkC7RYCWJQEa7G8Raq8SWfW9JUDnVdqqhE1EE6Ad9tdwJ0Bb\n/QsH9NBPeVhMYa+1mLWJmfhnAnQ2pa5KOHARoB3213AnQFv9iwf0rYjmNIAGMxpSRrr9lDmq\nuldR7Q7hBqbXo9gmrLNbhp6Lp5JXJRS5CNAO+2u4E6Ct/iUDuskDaFOvOvGgLveEgO7e3B1k\nQIAehEHX/AGdj9AEaITAq79iQDNJw7FTAdq8TuzLlx3Q/J89n3M/0gS1FmMXcSo+ylCVEIlo\n/17WPoUJ0EHuBGirffGAbmUYlC3YoyMXnHpj/AMgbJ0G0OE0Ne+8RkAjQoAA7bIPU9SfRgL0\nNO6w0p08ONb7JGzHhi5cchxMPm6dFtAv26p+adfs62p37Ff2L0053lf1s7RZemmKsK/9pSn2\ncwrcz1d5qpIrBAjQLvsggU0etDsBehp3WEntLYAGRhlaTEzeyrbwqGpzy/qyUoj/06U47oc3\nDBpeO1izxecGeu2guu89ATqNe3mAzkboRINy/d0J0NO4w0oPaOm3OBm32EzM3ugMdxpAd/po\n2JsJd+fmvKve2Hu4L4uP2ou7Lytfqq24uQe0tK/zxd32Ew/cz1eZqpIjBAjQTvsgEaBn4A6r\nOEAbywEO0wB6x/h8aQSzFvO5umeLB7ZUs6ULcxl/WeFD0+J43NwDWt23fw9tgAjQPn6R7n4q\nGNBR7gToadxhpbU3ARpITyg7ihZGc3XNFDnobf3Wfah6ko907ZbGlfrm9j91XwJ0GvcCAZ2L\n0ARohAjQdhkALfaUNu1ncrBpCkAfqurYfiBAN6UB2o+FBOggdwL0NO6w0tgbG8AnYaUZvQKV\nXU1tSZP04rhnmQkJqQGAVvddK6Ad9CJAu+0ndydAT+MOK4n9rdQC1uz7zdbssjAhHroJPQmg\nP9qHhG26mWun5aDvRUDvgBz0sG+7eCBAJ3EnQE/gToCexh1WKkADi729CF/j7tJAlKIA3TWh\nefeL5oUtv7BOGXutF0e/y7i5B7Sw79u6e3GsAdCZCB169rizIUBf3R3WNIBufzdLD2fxJx7R\n0wD63Dah2y7P9bEx9YMedtH7QQv78i7RjwToJO4EaKeQlYkAfXV3WCnspRjQhpLcjg1kI6B7\nl9sSAX1pDfMs9Mv2QtZjt6a670YS1sNIwvFnv1kaSdjv+7zikYSNg14EaIS9n5B1iQAdaD4T\nQBs+XOxlPgO/48DjjsxtcdSBp4mqokSAxnpFu/uqSEBjGzsE6EDzOQC6kTIcMqCFpjPcNBaa\nzCKqUcclQGcTAdpbo30WQgcDOtadAG0znwWgR6kM1vPL4B7qU8Si/uwXpdkD2kovAjTG3kOl\nZAsdVgRoo/ICWk5tQISWUs6mznomEaCziQDtrRIBjZmE2+VOgLaZzxrQI5nHjTZA+4oAbddf\ntX3797v67vsPtlS3GjcRoL1VJKATuM8J0Fmn1F8CoKXvVCp5ARb3jwXbZd+DEaCt+qe2A/ob\nh/JvbUkCdKwE+xyEJkBjRIB2SEAwW5Ttb5W+dLcqztPVOAJ088+dHdD/q+/+YYX+xwD9u7Ix\nY1Wy3GQ/d18MEqCD3AnQFu/ZAXrMH3PeavZGPnuO8uYiQFv0V/0NBnS/9nv99+Xnf+s/Wdk/\nlUIEaG8RoJ0iQHsrK6AheyOfPR459yJAW1R/H1Dc/PVbfffXsKFb+3v9b9M1nv+q/1L2JkB7\nS7TPQGgCNEYEaKeELhveNY5SHC7hAf2PiGKmb92Gfm33L/vn9/rvP+q778LeBGhvFQdon5Mg\nQAdZp3M3KRegu9bwKTBScW1pArRdHYL/rr/9aH584xmNxgBoAeH/4Trl021hPhlUwqnxZ0AJ\nRIA2W6dzNykjoLsPVtKaNhKgDQoB9O8160r3g+Uy6kESoOv6v5cC34VER86qZL611ILG2aPk\nlTCkFnSQdTp3kzIBWhibom6Vi1pmIHWLAG3XgGAByiCgW/3gXe5azQDQKXtlppBkn57Qvmfv\n90SHAB1knc7dpBzd7G5FPuv9nuWXpxhtEAcjQNulA1pY29ypgBYXs1Yl470lQCPtEfJ74k6A\nDrJO525SFkAP4NWDRAW0xcd9MAL0RW97Ntt0ff980DZpbWTpY9uL41+hCzQBOkZlAdqzSxQB\nOsg6nbtJuQA9fIAK9Et2H/fBCNAf+2pUvT/LW4cc9N/A2uZPvvrv+jtrTLMstchqArS3ygK0\nZ5coAnSQdTp3k7ICOmD0tpfWDujzY6VoLxXuUPxfNmSw+avHbw9oYSThd0bpH98FkBOgvaWO\nms1qP6E7Adpsnc7dpOT2cmZ5CVFVlERAv9UXJN+/fPA3tRwPL+xtWrWY6OhR3E66cfev4vXb\n0Lfuxx1fFDpC561KJnoRoLH2E7oToM3W6dxNygPofPaSVg7oqtq+ylvf7qV3aYkjCes/VD5f\nmsx3/egUtvibOJqQAO0tArRTBGhv5bAXfpMlRFVREvl7/6Fv/7hPc5zyAe1PwGmrUmpCL6Eq\nEaC9NWv7lQM6pwjQsfYEaLzVHACd5Fufv2ZtT4DOpsxVKUFrhABtVtJrQ4A2OqdzNyqffcBk\nSdruDhGgmV62/Hnh41nfFC4CdKz9FQHtP7P6YgANXXYCNCgCdA7pgN5VVXPk3aBTHocAHW2f\nmNB+gE7oToA2GSd0Nyqbfch0o8r+zjIE6KZ5vaC52fJO0C8Jj0OAjra/GqADGtAE6BDjhO5G\npbeXpxuNtLGLAN0099XufGTN59dql/A4uasSfHN9Won+x1wRoFO6E6C57/IAHWmPCDMCNOsM\nfW5e+BDCKuUDRAJ0tP21AB3SgF4+oOPuhuWKzhPQtwToPAIAzVrR1SsB2qmpq1JaQvu0oJO6\nE6CtF3SWgB7+iF/t28WqAF1V1ZE9KEx4nOxVCbynBGgP+6ncFwLo0LvhaijODtAdodPZm68Q\nAbppttXhjaWgz7vqMeFxCNDx9gRorFW5gI76Gp9CmQCd0t6cUyNAN82+m8Xu8uMt4XEI0PH2\nBGisVamAjpzzOIUKt+cXiAA9SgP0mU1pV50bdarRSJUO6JDqNnmsJyU0ARolcw7a+27gmF44\nQfPaG15siHBfDaCb467aHppmm7L9XP6gXAJ0WhGgUVaAyiZoXvtbqU+1l/t6AJ1HBOgE9lcA\ndOghlw7oW/9LgyxfNEGz2guvzvJ3Xw2g71OOHxxFgE5hn5LQqLMP6gPtcF8KoH3vBgHaIXew\nEaAT934eRYBOYX8NQCd3XymgsaULJmhue2ewEaBZN7uks9j1Kn1QLgEaUnADmgCNMQJVMkGv\nbU+AbprjdveWAdEE6BT2VwB0evfFANrvdhCgs7qvBtDiO70THqdwQAdx6AqxnpDQiLMPb0AT\noBE+sGZNUAJ0ai0I0EAdIED72WuHCz7eKgDtczsI0H4CQ48ATYD20PIBncV9XoA2RJUvoPEl\n50LQvPbwdzcCdDYRoJPYE6BRVgTouduL2TXUTB8E6DgRoNPYpyM0ARonG6DRt8Pjts2EoLnt\nB0Ajp2IiQMdpiqqkVwMCtKf9FO4EaKuy3JeHvPajkgP6VmxLE6CZzs/svbG7Q9LjlA3o5KPl\nUogA7RQBGqlZArqfloNa0JLe+HR2s5vNjmkFgE5HaNfZxx1o4YAG8qN+HmbliKqHkdBzAXQz\nNKBx7q6o6vs8YLo+vNTuMlNJH6jSdeCY23zQTAToaPvuILe3EX2gHe4EaKsI0JKkSxceVW89\nzzCAzjTdRZCACfvrAzvD8666T3icSQCtVdftEhsAACAASURBVAQCtJe9+GAmjs8EaLuFRQTo\nIHdHVD1W9/g3RBUN6Lr6aM/wPLt+0AToAHsQytF8Xg2gUffj2oB+aMYs9EoBXVUdz9p3rn7U\nO7Z0X+2ObOXxsaoej023JfEQkDjBs9mNP1KJAJ3KPhCcGohPDQBlpzk2+UGAtlpYxM/9wVXK\nSwTot0vz+ZHnOFpAsxeuXph8IXF97t8ixZb4lrIBPbSgD1XKVPk0gFarAtI9/YxtKRQJaBN8\nLYC2+CgKPXkmArRVmQDdW64T0AzObzzH0QJ6z5d252bHFvfVrmmX+i0pTzpO2qk8VvUbO8O3\nel5v9W5FgB7L4QBt2dei0JNnWh2g/cIrPaAfhJ8rBbScF6iqLp3B+kRs2RTLx26p35LwnCNl\n6sXB9JHwOAToVPaBgEbZO8GcYsofJRT++q2++/6DL36/wy9CVpije8sBaMT9CAF0SkIToN86\nor31gGYrxZy0vlSKgH7Q1fjbpBMBOpl9oseEon0KJJvdFcmh8L1mumPU/cYXf2swi5AV6uje\nmj2gH6R/Vwnoxw5pj0sAdHPeb6tqu087a/9EgFYqAwHabp8Wyqq7QVIo/FP/cWHzX/UfTfO/\n+u6f5p+7+n+IRcgKd3RvXQPQDylzHATopuaviTqzp2oihnliYyenONotCc85Uouai6MhQGOV\nC8y9sFXp9/ZJdF2ztvTfl6X/1n8iFiEr3NG9RYD2UZGAPnSP0x6rgwToHRvt8Sw/JGy3pDvl\nWBGgw4nnco+sZPkAnRHMvTyrEgP07/W/DWtS/45YtFg5ju6taEB7Xt3UgH6Ql9YI6H3VTiz0\ndmGwBGjWua6Ru9m1W8oZ602AzgjouFpmtI/iaWYw9/KrSj/qby2km/Yf56LZynV0b0GAvrVu\ndxpY1QI6HaEJ0GPEXBakFMeuHZ4iDlRhH19KBrT4RpXq/iXVcaYCNHrsvmkXDzncY2tZBkCL\nbC6pKv3FkheegP4P02kC3TpWAdtd+7v0wP+fRg/g4uLk33mzpESGWXZAszRNGhGg09mHna/a\nci4I0P/esaxFoS1oaAquW+t21/52JW5BPyjLa2xBw1oGoKtEbej1AVocvpXY3vuEobRGOVXp\nx9039g8BunMnQAe4rwbQza5+ZcPTX2rWeH5M1YSeDNBSfbg6oGPqWSpAG5LO5VSlb23P5ruR\nv85Fk5X76P6KBLRvdKUB9IPcd2P8QIDuNVNA7/sBhAfWeD6m+i1WB2iwgiSyx5+w5YlgKVXp\n39++/csX2k4a/479NSyLsBXm6P6aHtDRX754P5CHB43zBOjZCZgsadi0bdL9mSkY0MHP3FCA\nDq9o0YC2d9copCr9XX/rlv7k3Zz/rr8jFkEr1NH9NVNA858PBOiZC8hBdy3oj6Rzjq4N0A/g\nYip71BRqjs50ZVSlfwc+lzqS0Alox924CqANOxOgZyeNv9uqfmM56LeataCTzTk6HaDFGkGA\nDrJPIGxV+qPudFn+jS9wYDsXASvc0f21IEBf1hOg5yUN0K9SB44q1ZyjKwO0+mgmsT3qlB3j\nUMqoSrUA6B98sjq+2rkIWOGO7q84QHtHFwE6yH01gG72PZ/bqasTzWm3ZkAH1rVYQIfb53Wf\n2XzQ1wJ0FKEJ0EsRkGL+eGSz2T3yVDSbSiSJVg3osLpmO/m8880lUAGATtWTmADtoSVEVVFa\n2lwcTGOdwLiHs87srtWPkMpGgHbqSoC+dRRAb4SUAtDGXQnQcxMBmgCdQwUAOhWhnYC23o0A\nQHfnTYD2cV8PoA+74SlhwuOsCtBA/QiobdaTjyf0EqoSARqWedcHAvS8pEH4IMzDkfA4UwJ6\nrBTlADqguhGgnXJEVRpCRwHa/z4NgI44fQL0YqRBeEeAxsrkDlcP7+pGgHaKAA2LAL0YASMJ\nH9O+jbAVAdq7vhGgnXJFVRJCzw/Qlh0J0DMTAOgsxykW0BGkM7hbntCksO8UTeglVCUCNCgC\n9HJkmSwpqSYF9FAtCNCh9hnd5wZo7VJrgLbcjNIAnfJttJCWEFVFScPxS6qxg7LWA2hb8yWB\nfS8CtMVqOHqWJrQHoAPu0gjo4LMnQAerHiYfah/Dbffn7pNast1ety81lJ7b9S+jOqQ4IWjC\n/hyEJkC7tiHtexGgLVazBrTylld/WXcjQNv0Vg2TW/TErTsCq0Wl7RCgqyoFoa2vvErg32s1\ngLZXAJ/q4Tj5WELPvCpZrcajp+ARARqvmUfVY7Xvp4dr8Xfcte+UggDNfp533ZxF2pZmn+Rt\nVMsEdF8xigO0T/0gQDtFgIZEgA5WVQ8P4Xr8bXmT2gTo5sxzIhCg0/S3IECHHyQE0B4VhADt\n1HUArV/5BIAeTpQAHeSeJKpeL83hffXKl3v8vfEmtRHQjf5ek7yAzqRSAR2DOcjdGf8E6Gmn\nG00AJESvOsPN8LhHEKADT9661ykvoUuNqp+wlFK76tAcusxEj9ez4dV/zhZ0phRHJhGg8SUs\n9qIiCV1qVfLRkgDdn2g0oO07EaDNgG5hW1e848bAXMOr/4YcdZuDFpIOw4cP3G9l1UIB3VWN\nyQGNiX5sDaEhBU5hoioeSARovEqNKhSgXzlsuxyHG9BdL45zAwN6l4LPEKDPz7vLgdL04htE\ngPYsRIBGaDmAfmgI0FHuKaJqyzvGffCcBhLQQz9oaQvzStRbWQf0W83/ErSvvEqmWQLaEcu6\nOzL4ccUI0E6hoiqaSNMC+kFaGyACdKCOQzu47drcr901Eq6H3s7CrvqHQ+sSLQ3Q3Vk2VbLX\nEXJNDei2bsQC2hHr+g7O43kUI0A7NQ2g1SBBA9rvGSE0DXTIubuCNiuh5xxVzwOg2Yv+eua+\nyh2dsYBu7qv7+FMCAL2v6gM7xHmX5gCdCgW0vQo92INZc0eHPqogAdqpYgANB9JVAO382keA\nNmjbtXmPUr+NNu9h7mZn+vCR6SFhzWzZIc5z7gedBNAPjmgPBzSqJAHaKQI06GQTAdqkj6FF\nuusZ6B5JaPmQpgkNH9eQF4/QTAFtjWbV3SfyEWUJ0E7hoip1EhoLaJ8H0GOsEaCD3OOjaj/k\ndN9YVkOdi0Mdu6cwWZqLg687J2lCm1vQh2FepxSaHNC8esQD2hbOMYBGFCZAO1U0oH35DAE6\n4NwJ0IGqa2mx6yv33K4JAPSF+Ama0BqgH6v6jR3ire5nDUmi2QLaEs9RgHaXJkA7VQ6g9a4e\nXh04gwANP8N2dz3KSeglRFVRMvXiSDUQptcMAQ3lBCUp7p5xT4CO10SAlsPkFvzdMBA3ywho\ny8mztPWDBmnXL0uAnpeAftA9n5NOC10moFG9oI3xHAdoTFXKqSVUpWIB7Tv+aWSz+k4qK6D5\nP345EQL0vASNJNxvxzcJpNL0gGaVJAmgjQEdiwHvcTBJtYSqVCqgvcenBgDaEJ4E6GVpqXNx\nNAkBbYroaAz4joNJqiVUJWRUpU1Cw4CWyiQEtPHkDeFJgF6WCNAmuYfcRve2JUBHqlBA+0/w\n4g/oB7gE5skGAXpGAgD9suUTcjwmzXFcAdCXelI4oD3HwaTVEqrSUgAtPO4IALQJ1qBOmELh\nWkJUFSXgpbFV1XblSNkNeuaAhkP65Crgls84mMRaQlWaCtBy/mJaQMNnb4hOXO96AvR8pAH6\nlXW23vJuHC8Jj1MkoD2msoNimgAd5L5QQI9lQjMcwYB2P88eRYCelzRA31e785E1n1+TvLGl\n1+wAjehferJuxcljoGJiLaEqYaMqaY4jI6AvCzqgobM3dJZG/J4nZLlALSGqihIwF8e5eana\nwegJj3MNQBur0rDdsm0iQHsMVEysJVSl5QH6Abhy6QGdj9BLiKqiBE6WdF+xt74sHNC3t9bR\nuFoI6zFNgA5yXzqgA17S4wtoQ3Bifk0A0ClpvYSoKkogoPk7BY4LBfRtJ8e+iFpxMm/yEHag\nYmotoSoVBei+UEQDGgY0orHgC2ip44d1N89Lt4SoKkoahLfV4Y2loM+7mU+W1ChVCQnmTlBc\nquvSABo5UDG5llCVJgO0QF3zk40EgG5QgDbkPFC/ZW8vPle07Oh75ZYQVUUJeKMK0372r7zi\nYnXFD8y9vAAdV/8J0MEqEdAxGQ4DoE0pZ2WVF6D70o4dVwXo+v6le6fKyz3vZAzOIirvMvRG\nbsv1U2QkSz9oPmf+ztjz3F8a28ofzL0QfZtSAdq0OwHaKXRUJcxxWPoG3col0ZLOzg1oQ2zi\nfkfla9/4w31mfvY5lDmqLuBrswaP3czPTkC/je1YdYL/BOfDjbQ1x121PTTNNulkdlcCdLg7\nHJnyWu3bYtqDEaCdWiWgTaEZAmihGe0+Mz/7HMoO6G3bHq63PaClrfoej9W+zwS7XpEVek6J\nfFyaGaBNgQlWJQK0l/uyAR3yjc0JaKmE4XdB/opS1yNX9zz/yzbrqKouuGWT4H9c/sUBuqqb\nupI3b3mTmgCNUnJASxv0B+JJD0eAdioc0L43LSeg4e9lpiKRMAWHvxKguarqjQ+ffqlecYB+\nrfbNnnVJFja/8SZ1TkAvZrKk+QAa9CBAOxUB6GBC28an3uYCtNgTz/8ATvu4RrnTPpnCo+od\nllyoqs78NYL31REH6F11aA7diOt+87nawoXDtOTJknIAWtyScFAWATpIMS1oz/smDEOxATo6\nw+ECdGy4ufjvXhtgn0rZAd1s+ePAulEeEnZbFZ05I+vqLG02d/kI0ZInSwp3t0XmuC3lqFnA\nhQDtFD6qgI5qfo3oKwPamS7GygPQIYcqNaqwgN7zNvEjDtCvvKdbl+OYCtALmiwpD6DHjSdn\n0ahDEqCdigK0370TRqFcE9DR4bZSQKN0oepr9dw8X4iLSnFsLzRnjxS30ubMgF7SZEkEaItm\nXZUcVkhA+9w8FKCD+IwDdMDfFFCOBrp9VbB9IuUH9PHSLN1VRyug+0b1cWhgH4XNR96wzQno\n5UyWlAfQw9akgNaNCNBOxQLa4+4JwwSvCOj4aCNAm8WIV1c8s4wB9PMA6Gdhc5v3yAvoHJMl\nnWakB/x2V9GER12K5gloYRRKYgiZxqdC5SYEdNihZg/obugJJsWxrbqB4VK/jTbvkQ/QS5os\nKdTdGZsPg3uyBrRuRS1opzyiyjAYz68JfWtyj5EHoBNEmz2DYlsRZZ9GEwCadZJ4RQH6g3fJ\nY9qx4S1TjSRc1GRJuQDdljgl5TO+pqbRrKuSw2qRgPbvGggJC+jAQ806qvrE8nEEtDQXx9ij\ng2k/APKtfWQnz8UhFw4/J3XFoiZLIkCbNeuq5LDCAxp/B8dBKFcDdIpoQwJa/Yg99qyjivO0\nnZ8OAeh6HChS1/3m3XNvlQvQNFkSqs4+cPekfMY+LUqkWVclh9UyAZ0k3AjQ8xLNxaELFYsP\nGQAt+xGgnUoAaPQ9HPs4Xw3QKWR9Bgl/aAjQ1xMBWhcuFh+aU2o+E6A9NSWgm9s8gC7l2bD9\nmmAJvYSoKkoWQH+stRfH9QAtHZoA7ZRPVBnTGvgmtMU9XAUCGuoUTYC+jnRAv+2qZBnuUTMC\nNLbCJnlmYzk4AdopArS3bJ1E1AVxIwH6OtIgfKgqAnTigmEHJ0A7lQTQ3vdxqYC2jd4hQF9J\nwGRJvbbHhMdZIqCznPt4dAK0UwRob9nsHziGwcsBA1pft4SoKkrAUO8XPlvIcbfWgSrXBfR4\neAK0U15RZR6d4knopFdOO/aVb7uppQwRGli3hKgqSuBcHGy+veZjpdON4msrATrI/eqAjh3V\nvGhAmwTA+IEAnV8goA9pX6vFRID2PoFCa2q0e3mA9iR0yis3dZIgNaCnTdAQoNlkSefmXFUf\nbFLohMchQHufQaE1Ndr9WoC2TGFHgHaKAH0daRB+qXbHpu1pRymO9O4eZ1BoTY12LxDQfoQm\nQPdrCNDZBb80tu1rd0h4nNkA2qOqZjv3h7z2zQT2BGiUgOOWets1GBOgpxCQxnjZNs3bls+Y\nlE4EaO+TKLWmxrpfDdDdvcX1F7OIAN19Bgi9hKgqSjQXhyICdG73EgHtRWgC9PB5WYCu71+6\nd6S83PO5RJXpRtXy3Qyjh3b5rV+p7hglArSiIgDdzWaaVbOuSg6ruQAaOmqpt11h8cMCAX3h\naTv/0GMFzgcNlOf64Mt1v1LdMe6c9FUfj3VVbfcfsdaS5gLoK7WkND2UW1Nj3a8H6Pbuwrf4\nKn+Y5w1ofeXMo+qCvZay9RbzTsJuzb57jXf1PK5M1wNON9r37H9OdQwmArSfCNAYXRHQKSZi\nAT2Kve0yjAdAy79E7qgyXvY0gN7z1vDH5V88oHskd++QzQ3o17F1PkUvjhwTDo2aL6DZbKY5\n7QnQ0CacWkAniNwZA7on88SAhgYvtkoD6LfqpWFdjV+9AN2+I6t7iWxuQG+r+u3cNOe3epp+\n0Fkm7RzcvfcoBtDNQ7E1NdL9ioBuTHMBNd7931O8wXXegNZXRtljdDJPqueIqidYcqGqOnPI\n3ldHrxTHS7v8yJu0uQHdprwb1s6faCRhRkR7h8vVBizoIkC7dVVARxMa3r/Y2y7C8WGhgL60\nTxveJFYeEnZbG7U8177beq62zQDobC+NrYc1Va1ui5C1KmUj9JwBnTn7Q4AGtuGUKmbnDWh9\nZZw98hQyA3p/aQWzqYh8AL376La+sLZ0bkDv+xb0gbfcU8lelXI1ognQZq0S0LbMhBegLdls\ntGYGaAHGDyKgpV8jO6BNm9LkoJvX6plP5umR4nirWWqDL7OJjLL34tjxHPTxpU6ZgnZWpTyI\nnjWgM7zyULK/lnupgEbf/AHQcYQ27DwTQOsrFfsMNdrSgE4F6GO149Ph2wCt9ozmEzPz5aHt\nnTUHrSjNcdxVKQeOfKPR7xwI0EHu1wW05aL6AzoqaJcNaBtM409AVyJAN3V1ZrldH0Dzf9vl\n++pjsYDO8Sd33oDOm+RYJ6Bt1zQA0BG3yLTnDAA99LFrTIAG5+mI1hSAfqz2bDihTzc7gejH\nartcQGdANAHaZn8l92IBrWwzRqMI6PB7NG9Ad/88qC3lU78hA6CtjqkAzcaBvHoB+rxj/Ti6\nrc+mYeHB55TKyCFkVfK7pc4IIEDb7K/kfl1A2ySPlLMidI2AFsAsfNQB3cE5B6DNG1MB+ngh\n7HEEtNBM1Vus/Zr6PCK5XvhkSfiban4DsdndZelXPH9VKmsQTyL3cgEtYPehsSM0GtDG/YoH\n9IPYgNYBPbSdg5vQPu+tHZQK0BfC1o0XoOv9uRkB/bZwQCMRPfwRtxcjQFvtr+NeMqCl7+YE\naEX9BHZjA1prKJ/kLnhhB4H3swN/DfNB3wMT2H3cpzmOT1Vy3Vepx7y15NwBnZPQBGinLP0s\nVgtokc9AElqcLSOkCW3JXl/WThNVRUnOgm9f5a1vu0kfEg6yPWpXZj20HpUAbbe/ivsSAP3g\nLBToXTqgJf4OjwnlImLpoAOAOz4QoN/qqqruXz74rHnHw8s9S7AkmtLOd2p1+M4CN84aAn7R\n6FvVCNBB7gRo614FA1pnLgRosazvQ38wrz06rxzQzXlfKdqnOo7/rAk6ig2pKctRZw/ojIQm\nQDtFgFakIVcF9MP46N6/p52Q/YdaYgToi44iotvHk2kU22PVfKsJ0BH213BPCehTVj1gtpgL\nhVmXLJZlUFdwCR/ZT2Gbl/kDtGxaI2slgL7obc9TG/fPV3+rNzSyFCpm3jR/QBc0018qd2pB\nJ4xZb8XZgxlGsduG0M3Dswktl9U/sc/Ugs6msKrU3W+Hd6Kvi941baWARp3RIgBtnm9urYAG\n9SAgWehm5w9ow8fRiACdTaFVCXODCdDh9v7C1TkCdIBx755TOb5cCJ0vpG525p52YIpZ85Ss\nHSdPgI5T1qqUpstSmYDORujQ4dAEaAK0GgUjRdV3nsDRogcRvEaic0OAzigCtLeKBDT2S+t6\nAB1yg9I92PZWMkBrK7osMQLQQO4D7rahZkkI0NmUtyqZAt7H3b+eTVSVMhE66OzRScVlA/rB\nXSjAt3fPqjQtIigMwCwxVFLjrtFQXUmAzqbrDcqNtLBohYBGT2ZFgPb37d2zKhWghWWrvU7e\nlrtaNw3McQnQ2USADrfPQ2jqZucWARqUCNcHN6C1ZEbf5cNcyCACdDZdLVsY6WATATrIfUaA\nhi99NKCte8wA0I2ZrVCKw5DMELp7FJI4q+9f+DQXzfHlns05qk43qu9x3m+rajsO6JM/p5jI\nCDroM5siaZd0nEr5gA6gIAE6yH21gH7QFmD3rEpubwW0mm4WP0gd6XDHyhxVFxA/8oXHCpwP\nWtvhtd/8Bn7OA2g+ZVLVJJyHg+laVSluf7smq0pZCE2ARigtoIUOwmbNGtDafHMP0mQdMouB\nfnQOZQf0ljecm3qLeuXV2wWSx3Z+jDfocxZAH7u/GOOfhSTKXpXAqCdAY+wndl8voLui9h1m\nCOgHaHlYMzBcRTHU09mu7IDeV2xO/I/LvwhAnwdEvvG3Xqmf8wB6z2YYvTifd1Wiufq5CNAx\n9jkI7X32XiexIkBjL8xDX3RZgG5k5KobH4Y5/XUQD2uKAfRb9XL596V6xQD6eUwy7Nl+6uc8\ngK7Z3xDmfE73ZtpmCkBDcY93D0HgugCN/h7qcl8zoEdKGzU7QAuCOj1368GGMtSjw6bwqPoK\nSy5UVWfeKr2vjhhA31fDK6gObD/1cx5Aj/nwuQEaCHwCNMoeI3yi0OU+f0CrmPHxelgwoM0x\nYspkWOZ/hpQd0M2Wk69WXxrbbdWKS8vq58wt6ENVx9sPIkBH2WcgtN/Ze/J5KYCGE2cxgHYO\n9Zk3oE32XarDuCfuAPkBva8OF/I9Fgzox6p+Y85vddflJI2mALR+mwnQOHunfPlMgDZbLRfQ\njRXQCfyz56Cb1+q5ea5eG0yK4zqAPo59/4CXfAercEAHRc+UVSk9oX1b0Mnc1w5oh+YI6PFX\nm3XfoAtQj9Wu2VVHK6D7RvVuJOQHyzmrn3P1g1Y6X6fRJIDW6gABGmk/pftKAY29gzMEtPD9\nCrZP0nw2unMlAnRTV2eW28UAWuq18ax/zjaSUBm+mETTAFqtBQRopP2U7gRoq2YK6I7BoL13\ngsykCQD9WO1ZbrfcftCZRICOtE9OaAI0RhhA4+7NggEtENrUgk5D6AkAzUZrv+IALY4cfIU+\nE6B1yXGAdQ+LHgJ0kPusAA32ridAa7K2oFHPCDEInwDQ7BnccQS0NBfH2KOj05AOfgU/A3v4\nn1PMzh4iQMfapyb01b5dEKCtmieg+98vuBcHqo09AaCbmncvxgG6OT+zdPDzGf6cB9CHXZXC\nWNFUgJbrAQEabW9U2LdTAnRAmdYdWzBMV7J3BhEqCzJNVBUlDcKHqpo1oKWaQIBG25sUmD5c\nMqDh4cz+PrCWCWi3xDnvAtxXA+jdCgEdyL6JYz0xoXFnH/p4hwAdUIarWIJmtn8Qhn2bLhYB\nmuVNXnIcZzpAi1WBAI23BxX8+J0AHVCGq1iCZrYX5+8PcF8RoLMcZ0JA+49rmgegExMa24JO\n7k6AtqpYgua2R8ybRIBmHbVTjvAeRICOt78GoDO4zwvQwFXHrAkp0qpcgk5jb7tQBOimOdbb\ntG8jbDUloMd7jGwlBh6GAB3kvkpA4+9d8QS9oj0BumHTTs/7IWGzWECnJfQSqhIB2ltztbeM\nU+RaDaBf5t6Lg8k+dYuptK/WCuhyeqwWDugHZwlAcyVoVnvrQHKu1QB6uwRA9/VhYYBOSuiA\ns/d4xScBuiFAR0l7vazdfTWAnn83OyYfQAdTb1aAHqjaE/YkLEsFhh3EfRU5D7dgQAOT0sPX\n40FYT4D2lBhljqmYuFYD6O38u9kx2WcGAIoGqGxAK/DFAFpZfgDIjO0YTYAmQMcJajsQoFkO\nOu1E0J0I0EnsPc41AaBDyGw5+U4zA7R2zT0APWzwuHSzIWhueyHiEM+UVgPoZrebfTc7JtdX\nIqVkiGYFaIy9qdGMP6jNvdcCAQ3fFwJ0nPTIyxxV9f3LkS8cX+75G7OV2ezU8u2m+vEIlOVK\ngFLDQef+kLBp6wTGPTyve41YT/eYUBtJnobMBndBawH0g7CBAJ3bPc10o92Lsh8rcLpRoHyL\n6KNetlM0oQnQBOikZNbcNRGgrZo1QecO6C1vODf1FvVGlXbNecffRQiV3Ve76HPSD7oQQDcP\nBGiXfQ40j+4GrQrQ0k+UZk3QuQN6zye6+Lj8iwd0cxam+FfKxjN0aW9UEfWwQECnInQ2Mnci\nQItt50SPV1No1vbZAf3GOxm/VK8+gG70DAgBGiMUoPPkWVMoH6CzornVggCtXnI/QPN/CdDZ\n3R1RtYElF6qqc3XfsNkujmla0DlSHBe93lfV/Wuss6xrABqsSlqZcPvrxHokT7OjudVyAQ3+\n2SdAT2KfHdDtMJALcJWHhN3WRit/0bHPQUtlO0VPDaoD+ti9U2V3jPUWRYBOZR9DVZHNpVYl\nH80B0GJvO4xmTdBiowoL6H11aA7VIxbQXS+Os162ZWj81M06oOv+QNtoc0FXATRmuvnVAFpt\nOZdalXxUDKCB8YbiEgE6u3uit3q/Vs/Nc/XaIFMcHM99P2i17LZ+S3BO6ornqmK9tY8vaSfl\nuA6gT05Ex7RHrxTrAacMpTVmXZUcVol/twf5gyegpSHfbs2aoPOOqgtWj9Wu2VVHK6DhntH6\nh0NVxWchgLk4uuzza3yCW9C1AO1qRa8A0Iak86yrksOqMEB73bFZE3TeUcWwWlf8mV8KQDf3\n/JFj5DlBJwkcMVbXA7S9gswQ0P7jvcEngrOuSg6r1L+b1Bz2BrRfkM2aoPOOKka8x2rPhhN6\ndbMzffjI8ZBwgYC2IXrJgLZ315h1VXJYXR/QD7aNVs2aoPOOKka810vj+DURoFM0obWD7paW\n4mhlQHRUR7OrxTrqrF2d6WZdlRxWyX83sUsGaojnzIY/zcR+AkAfK545BufiUMdXK0yWyvJ1\n5/gmNPTKqyU9JBwFgmrxgA6xT6GFPZfeVQAAIABJREFUAtrS/0Xt6xGqWRN03lHFsVoLw05i\nAd3so5vQlm52daS1pOsDGkT0ggHtejY166rksEr/u4lTaiAAPbvOm/OwnyaqihIwUKUjdD3/\ngSqau8aseQI6yXjvJVSlCaNKmFMD0UGdAD21+3oAvaCh3oD7Q6qGDuieVARopyYG9IPd/QFc\n9NWsCbqIqCpKS54syfC8PU09MrgnlM0+AaGXUJWmjKpxuAmiew0Bemp3AnScygG0iGgCdC6t\nG9Bz7LzZ6z2vfS73FQH6jU/CsU3Zh6MsQI+IJkDn0vIAPV5zx9PbyGkCCdBB7usB9PAygX3K\n45QF6A7RkZi7ZlWKJ/QSqlJpURULZ4d7ChGg5yUN0G/jhHkJ5mIaVFxVYogmQGfTSgFdvLvT\n/p0AXZSAkYQ7NrspexVi/Ewfo0qsSrGNnatWpWhCL6EqlRhVZbu7AR3XhF5CVBUlYHz5uV04\nL2gujjm6E6DdoqhKbk+ALkvrmCxpju4EaLcoqpLbE6DLkgbhup/e45B0rDdVpdT2ZT+MIkCX\n6e6yf498SriEqCpKGqD3Vf18QfTHXu3GUbeymX2/q+++/+g//U8sS1UptT0BmqIqvT0BujBp\ngD4PkyXJ72v5xw3ob7zAb92nH3cE6Kz2RT/iJECX6U6Anpn0PPNHP1nSQVr9T/27w+p/9d0/\nzT939f/aj7/XBOj12hOgy3QnQFtU37+0jdLjyz2HFziFqKDzfltVOzak73Hs83bfvpGFv3d7\nf449J/RkSX/VfxosehB/r/++/PxvV+6/NQF6xfYE6DLdEYCOIvSso+qC1Ee+8FiB80Gr5fts\nQ31m73Lthl6/VFthz+g5QdE9Nf6q/xI+/FbfDR97EP9e/9sMLe1/628E6BXbE6DLdHfYvw8/\nstjHKjugty2z6i3qlVeP1Y6922THntZ9dCnhY/sSlbbwZVPsa6nQgP69/vuP+u57t8z0rdvS\ng7j7t/3nW/0vAXrF9gToMt0J0BZV1Z7T9aPaowDdjRlpR4w8tyzeVc9i4W3seGxzP+jzozSS\nsIUyp/Lf9bcfzY9vPKPRwID+s/7vsP4/XCcSiYsAfUV3ArRFVfXGExUv1av/S2NbNHeYHja9\ndUmT8HMyH1Q+fH1BbvPjO0t0/F6zrnQ/WC6jHiQB+p92m7A7VaV12VMLukz3tQL6FpZc6NIi\n5s/67qsjCtD76lFIMbN9zn3ft77wmWekIyQd9LGSpRf/wXrRSVAGAf3b3Q8C9KrtCdBlutvt\n34WfGeyjlR3QzZY/DqzVl8Z2W1XtWEeNobfbS/W87x8VDoVjx2PLu9cSn6HJkiQqj6uY7gZA\n/8GzHwToFdsToMt0J0DbAb2vDs2hekQCunljbdq6TzNfeL0brZSFQMm7HwQ812DyRGgqi6uY\n2l4c/9a/S+3qTlSV1mVPgC7THQPoGELPOqouMH2tnpvn6rVBpTi4Ds911TWiz8NMc7kAbTG8\n44lnhl/WoUPc0mP4T7767/o7AZrsCdBluhOgLbqw73hpA++qoxXQav73Y8gz6w/wjrH97NCA\n/n4BL3tI+Dcbg3L3D+sY3Q0t7DGsjCSkFMea7QnQZboToC1i7KurM5slDgNovZWsA/o19sVU\n6Ab4jzveJOYdodtJN+7+VYr8JnWPJkCv2Z4AXaa71f5d+TexfbwmAPRjtW+HavcrpK2S7rsn\ngudh3k8d0Nvq0EQJaEEbenH8+H5X/9YNH/zrwuI/VD7zEt1QFiYC9IrtCdBluhOgLWLEe71w\n7xUH6ENVvZwv/+z6rhsaoHOMJLR3swsWVaV12ROgy3QnQFvEiHdsp/EE5+JQqbjv1uxEg34p\n11wcBOhC3OdtT4Au050AbREnXs0TFihANx+P9QXPr7JBM+65e44/J9OGQx3bOJdEVWld9gTo\nMt1RgI4g9BKiqiiZW8mHIbOSQlSV1mVPgC7T3Wb/DiwZi/jbJxABWtoUOYpcElWlddkToMt0\njwP0+7uL0EuIqqJkAzTloK/pPm97AnSZ7gTomckI4fOeAH1V93nbE6DLdCdAz0y2XhwpnxJS\nVVqXPQG6THeL/Tu4KJV4dxJ6CVFVlGyA/kh4HKpK67InQBflPmKVAD0vmQF9HzlGURZVpXXZ\nE6BLcn/3BLSB0ATo6ZUyz2wTVaV12ROgS3J/H4lLgJ6XCND53GMmPkfYR6qcqvRXP2kLn8vl\nB24RtnIfPYFm5/7eIAD9bvwwriVATy4CdDb390hCrwXQ//SzarWTJP6GWoStpKNH/n00a24x\n+96kAfQ7AXp6qYD+2O9Y/419ygeETOsDtFQt0ttHq5Sq9M9dB2hhPnHnImylHN3ZJyxQM4tZ\n+T1WcYB2drQrJaoWIxnQ5/vxGeHZsEeYVgfo0l/vVkpV+qv+1gGavwyi+W/9J2IRtNKPngfR\nM4tZAvScJQH6LL40NnqiPEkrBXS5E4OVUpX4G9L4UvtOy3/al6o5FkEr6Og5ED2vmFUC0WT/\nbvnUryRATy8J0Cy78cySGx/7xONUVgfocWKwYEKsA9D/DG92EP5xLoJW8NHTI3pWMatOIYoD\nNEjo5QP6vN9euMcmiXus7vuV9+0bVpi2ezWvUAtvUxFLJBuGLfq8tXNVD8tv0A6BWhmg3V2W\nouxTqJyqFAbo/zCdEHrHFFqs3rUFRzlj6Qubux8lKgWg+wxCfWbvquom83zhk8YZ8goCJuUS\nWQD9WAkzjF7a0I+JjsG0LkAjvi/G2CfR3AENWoFHT92EnlPMavNrhLeg28azowldTlQF6LHa\nHfl7qvbsVd1tY/XYjqg2vMKqe4Nho5XIAujt2IDmJ1brxYO1KkCrIRxGCAI0ATpaWEAjQnb5\ngK4qnp84c7o+t6TdVc/tprbIVs4rXBhZV/3OYoksgK4q86dYrQnQegQHIWJtgL4b+etcNFmB\nR/e++qX29YVlO1s91ZYR0O9m+0TKDmjxE0dzh+lh05uUV3i9tLX31StQggCNUimADiL02gDd\ndtL4d+yvYVk0WYFH97z45Q7GAGU92ykBzbeUE1WybmDJhfbVo5BiPl4AeO6TCj0Mz9JrTHbV\noTkoCD93OWv3b4OS6FNTiiOFO9xFKZl9KpVTlTpA/8m7Of9df0csmqzgo/tc/Hf3AKOyYtY2\nYBXo2xwM6I7MRkC/zx/QrBvbdj9MEvdSPe/7p3IDcEXynjki6zYxIpfI9ZBwfAstPSQMdDfF\nbyL7ZCqnKuUaSTgIf+3fMeOLiorZd9vZAg+rsUGrrcEA+r2gqJKFA3Tz9sj6YfRp5t3Y1xgE\nNMtwNH2OYwJAsz4jB2GZutkFuFszdPH26VROVeqTyr/xqTa+oRYNVvDR0Zf+XVtAuCdW4YA2\nEfq9bEDjdXiuewqeu6eGjQHQW17wo816TABoPlBlTwNVYtwtNduX0KsD9A8+WR1u0WBlODr2\n0s8P0O/DD9NG5SMB2qmPIc88YrZfOl6w2PZ35lngTkelRC5AH2mod6S7tWJ7jmlbDaDDlRjQ\n7+Ci0z2tuDs6VJCAfho+ZgL0+wIArbeSdUCzrEYP6OeBlc9KiVyAFidL2iXlMwEas9lpn1Jz\nrkouq5kDmiEQh2hrylxYvRlWnKDyiH5HA5eNgOaQnnNU3XdPBM/C8O1GWdpW44umtl2fiqPU\nb6MtkQnQTXPg040KjzITaR2AdlYqH0IToJ3KB2jbLpmvnJ2EspCA3myGJvSp4Sg1lTSusgP6\nvdeco+pQVS/nyz+7YUC1CmhpJOHHMF3Hjg02nGAkYU6tAtAIDngQmgDtFDqqcJe9BEBL+HMh\n+l35F94qAXpIVMAljasQgG6CAY2tFZmjat9nD/oVIqC1xO9+6EXxxrIa6lwcfSIkUgTodO4e\nX0pD7BOLAG0vZN4l55VTs7j2E7cCWuDzUwtoiaAiZ8GkhfJxKA8R2t2Ctv0imO8KXLmj6uOx\nvuD5dfisAnr3LBQWRrSyRbkEARqlSHdH2IR15kITmgDt1OIArQ31sD91tpYSAd0MTWjB/h3J\n966wBdBDA9o+zNC8rRBAFygCtFl6rs7m7t/Z1iECtFP4qMJcdHdi1uSeSv1TPMxZSNusOYpN\n0wNatX9XixoPLDDUCGgLaa0MRrzqsBMBOpvmCWh7FhCKdawvQgRop1YAaNwwFDugnxoDoG0P\nGZUstQ3QPWGNoLW/bpYAbREB2qjhoQjK3ad/RnQ0phAB2lXEtE+2K/cOuZuTBvZCwyrWgG5/\nAPa2qUfeYSqDgNZ20JwcgEbVCQJ0Ns0X0LiK6sNn99N5zT6D1gVoxA26OqDfYXdXFw24kJzh\nMAKaJ/Kc5yRTWaXpiFcDaPsniIZDEKAtIkCbJH6BhKNHfN4S4W4SAdqpRQH63eCOeYRnOflN\nYwc0rrVgAbShoa0UsAIa+5yQAJ1NeQDtuqmJAG0I4tHdm8+YXQjQTqUEtF6gEEBDZ+b8Y6I0\noG2ARqV/pE55Sl9tS+NaKGBLf9h7eYwiQGdTDkC/27+dxbk7myiCewCfETsRoJ3KC2jTPnmu\nXH8wxLm7T3XE3aabiKMndOBIEiOg3y2fpHWmRrLj+aIkAnQ2pQc0Ymb1lIAGWi29exCf8zb/\nEVoZoJ2X+8qAHo7lBLSBc8J2sUQaQCsnIB/s3bBNPh1LfhrwgUWAzqbUgB4eS1hLReDfckzV\nPRDQjmcnBGi3wgGNSmiUAuhGIqJ1fzWc2CxJGQGtRbAWztITRNCr70FNgIY0U0C/A0vp3I2u\ncgydEGeAOpgi2T6XVg5oRNpgSkCPh4Ldh4am1UDf3Degh4UUJy8w1dWCFjabHyCie3IQoLMp\nKaBd0wjEuVtdxQ0n9wmEHdyj41G40l8bpPuVAC2d97uetXXs4XKPlAvQvIw1JOBxr7kADTQo\nhk2Gj2BIiwkQU456XCZAZ1NCQKt/oy1FgxMoqKOfXIeP0ykvoUO/u5TUYzUG0M6ch2llDkDj\nIGS3gE52yHBkArReG9WEhy39IaSezW2Sd7XGwSJAxykZoFHfTYPdEZ7jGZxcJeN0ymke/N0F\n2bQvANAbZaUKaPNW+8pCAQ1KAjRfSmJvDoKTmqCW9zIaGb81SmsJ0NmUCNBgGstcPDrDbd1+\nysrnCey9hU+9zAHQdmKb16YHtJ44S6QR0H0TOpW9IQ4EQLvSH/Iqw5NC9GOZJFF13m+rasem\n638cZuNv7qvHfvrQ7f4sFu9mGD20y2/9ymacbTR+vtF5AdqnGvm7Iwz7Au+de26CZm2g+wuf\nGS8A0BZCv6srFgdomcrCYrIWtBnQwhNEfTdtjdWXf5wM0Ofunaz1mb25qnutykv3QivgTa39\nyg++XPcrm7UC2tHDKNId4yefyxQ5iIwp7pCd0KczC0A7OwNNBGjpMIkALWeem6ExnRvQ0hNE\nYDdtjc14pH3nbm4fpIiqR/4m1uOOvSDlo31XN3t1d8tf/kF85VW/ct+9xrt6Hlcme+PV1QGN\nbpLZpgwwbskJoff3SZ7iZTvG8rvZuQE9BpXP3/5ZALob4J0N0IYtIqCh3eQvLQaIi4lpaT/L\nN7gUUVVVPINx5nh9blm8a7k7vhL2TSw//lNV3TtkFwboE5CrgmQvYQ6XAKGRmJfPybpZ2+1x\n8j6JEgCtEhpsL3eNNIPRJICWD5LE/akBAX1pWDvtb6IOfLJSVNz0bpoiaeC7kKB+d44HTwNo\n8RNHc4fpYdMbS0gr5Xly49LQbtPWywM0l+PxkwMQKQGNZ9FEI0kyEdrj7PFfczDuVwM0kNno\nPpuJYnFPpjyAbuewG/jcX4wnwx6dbm6iAW2R8EjQ1MpuGqEN/i7taCWEI6oeYMmF9tWjkGI+\nXih77hIdA3HPPCPdqU9xvLTLj9WhWSygWxnuGaKBjXHHqThAZyI0+uwdfzu93csDtFlTAFo5\nRjJAsxdd6YA+2QjN6JwZ0EPOQosqtQO1moy2R2EKQF8azdV2f+g/vVTP+/5R4UBcEb3dc8B9\nt/7cPU4ctyzzpbHqnUDBIdnjHA8SudyfnhzNFax9EKFdUMVemyA+E6Dxygbo5gkCdGOMyq7x\nHEVox9m/y1I2qUW1HcOjCgfo5u2R9dTo08wXXvfPBG2A3vVPEV8YzpcPaK7hBiLZUB6geT14\negqntGAfQmixCkCE9QG0/9GLALQpCe3x+0BF0wJaPQJ3j/rLPnayexKdNoM97H6j/Bsk17Ux\n4dkZZ3zzFFF1eK6rrhF97p4aNkZAs59vvDxf3l7KLzrFocqDDYnaOj4ssroLleApDNOifQAi\nFUBrsManOPyPXSigu1/F5xe6CqCfniIJPQJa8BkBDbtPAmhDeqPbYN3P7p4wqj6GPPPI2X7p\neGlTD23jbuUHa2fz5UP1uC5A+yhNVZJcHLXE5q7v6k1pyT4uywHB+tR4/QH0FAE69ACnpy6B\nHKFhmMpTeYBmAlvLiGDMG1V6K1kH9Gu11wDN/22X76sPArRBSaqSwmc7Uc3uxv18KK08P0Xu\nNe6QU54nL2nKyZLAHEfRgB7CI4bQ+jjCRgI0ZH6jLYQo4tog4ipvVN13TwTP/aBAANDb6jDu\n0K3k5buRLNWWAG0ScHd93WWLrq+SUUZ3R91CpjwUe19CE6CbBIBOEVUo+6dOo3s4oaWuz4NE\nQAPmVwc04r7kjapDVb2cL//s+q4bGqDBkYRnPvKwK/pcEaBNSg3o7km4uZ4Y3JFNZCejIy8N\nAbqBcxx+f+kmA7TuHkzosQEtCgvoKELPenzqvu+W0a8QAW2Zi4PN3dEXrVc8F4dL4T0VQAPn\nd03Y3aNa+WVQEqeLbdcGSeEw90nngwaa0CUBWuez6B5KaASgde9yAT3ddKMfjxe+7l6Hzyqg\nd89S8Q7PfIq7caghAdoo/YFLxP5jBJs4Crr7VSobojX7tISedVvHYbUQQIcSGgZ0+9mYQSkG\n0O/KstBWmCaqihIB2rC7FL8wRwF3/9505j10+6SEXjygu3elSioM0ACfZfcgQsMpaDOg+ZJA\n5esCWvzq9q5MwUGAzqZJAA13+g/bW6kaUE3R3cPqE76BnpLQiwe0gdDeD1sN7inkBHRQROEA\n3RfrOl2XBGhljqSR0ATobJoG0FHDZu1doAGMqu7BYwbRDfSUhCZA45QR0KP1NQDd9lLquyrh\nAO1kd4oUh8ZlzOAqAnScygc0/ITQturk2O4hXAO9SUno5QN6mHFTUJmAFm9/fFQZUtAAoPuW\nwZOMXiOG3XPdpbg2Gp+HK0WAzqaJAB0xdaN7DKHa0I1v65i9NfteyQhNgMYpH6DBBnQ8oE0N\naA3QUhq6IEAP/dV9nikRoOM0FaDl+uThjhrjLa+XYj1yehvAwXDyqQi9AkDDhPaUFdBRnRHB\nBrSeOBMWnzBjnPCAFvcxAFo61s2Nk9BLiKqiRICG9jNWgSdDWycaz5q5+eQTEXoJVckZVU/x\ngDb2DWq/goffDbgBbQH0k74KkhHQfI3hxtwAH7S/BQTo6bU4QEs1Bu+OniQJfJwTxOeNXoNM\n/JeVhtBLqEoBgPYXDGjX2ww9fB1/l4EBU0/QdvVzBKD1hjr/RICeXgRofS87b8fAPWlrPMTw\nDLDD+DhfVBJCL6EquaMqAaFBQL+bN3vb4gBtgrI6NamZz1ZAD38GmDQKt7wmQE+v5QFarDFo\ndzyfmxHIwqMoX3WtZ4jQwKQMmlIQeglVCRFVT2UCWsxduzJbT3ohOd0BstsT0N1RnrpP2jkw\nbKuARj/ZTiUCdDZNCGihyuQBdF+iHa8WwOcxuQHBQ+E/qASEXkJVuhqg1eHIMZ7WvkFDATiR\n0cXKk7YhCNBDLAPN5AHQN+MK4HnlEqKqKBGg5T0aXIuYR+YJWViRlHsG6dHGvfXk4wm9hKqE\niar0hA4FtNatt5UT0Jyd0ErwsWEQoBl1BdpCeQwO6L6j3dOToUfJEqKqKC0R0GP8I929+dwW\nO4XwWX00CNPj6cl18tGEXkJVuhag322bLTZdxw9rvIGAhuLsCcLyuCD91jfDKjOgzR875w7Q\nT7KcZ59QBOhsmhTQQ53JCOgLQ0/+6Q2g54YBHxd7u1UsoYOvPOqXLgfQ/N3WUXIAGnsnhmHL\n8mpMGxS+5GDqGWxA33Rv7N7EAJqlN54EQPOjJQe0taN37qg677dVtWPT9T9W9/3K++qxnz90\nuz8DOwhr5c8ppu0nQAfy2a8o1wbAc2PuZZCkb7VZgVce+cqukgCdugl9erduxpn0grO4AfMV\nKS1arQHNEI0FNHh8zuabjtDCQcft7OyNbWv8b2DeNXNUnetxAv5t/1qVF/4KWXDC/ua1X/0G\nfiZAG+Ueu68XbuURVn7nDtPZZp+X0EFXHl3zCgJ0fBNanUAgBNCmQiCgnSOq3RJ/55vm85O7\nxgP6SXhKyH904dA+P7RmPwSBGxG7Wr6zpoiqx2p35O+12rNXdVecxceq+mgMr7x6q6o922Hf\nEVn9TIA2yzn7lVq0kw8Ufc7dhmfDplPeNnTIlce3jJYMaJW1RkC/u8vAHdVu4l4MyCT8zhev\nzwuiL5C+MdwY7WgGQA8/x29SPCBueqEIDW5UEidg0t0WfCmiqqp4buLMwfrcsnhXPbeb2iLb\nvrHclus+vPFGt/qZAG1RIKC9kOhyH9tBjtYzvDXoGSReoYCOdp8K0MPVjwe046kgTN/3d1O/\njVHA1TzxM08L6M924fPzJhzQNyKgBcQ+Df3vWkAP24zBYuSz9AnaxxJ/aQAtfuJo7jAtvNHq\ncSjwzFrarfYsIaJ+JkDb9I51D25AO9xZIHePZpyAAAsE9uLDKizFkcB9shb0+GU8KaHftd8N\npO+7uAnfgL6cOz/tSEKrDehWlzZ0DKCHf0RUDnzm2Q+p/4yK06F5LO//pDeO5Y+YrIkjqj5h\nyYX21aOQYj5e+HruEh0Da888I93qnic/uA7smaL6mQBt1TvOPZzPVvceDjc88ecUVObkf0Y+\n8rry3qdRAqCHu5AA0OLQQRSgh6k63g0FmKDLemrPOQugGaGha6EfDFgzAPpG5KfYfr5Ifjw7\nFNOzH2Mr25jxGBaGIuFRhQL0pdFcbfeH/tNL9bzvHxUOrBWgK/KXLaufCdBWXRXQYnLDPYlu\nAxI6b5dSL3v/J/JlALoZu5fFSkhW6L+bnvR4l5bxCY4B0JGEHn9jkc+XpRN0MTwA3TWh+++F\nQoKDb9IA/dQ/QLyRYSyCl21TD/c0ZktGfucGdPP2yHpq9GnmC6/7Z4IE6PR6x7hH8NnsPhC5\nT24gEK1Xm1PIOeGFv/L275be7hM/JOQ8SUVoPtLEDWhkNw/wot4o/wZJ4rMA6Obzwn/9YngD\nerPp+4wKA8CfVEALM3iMhJY2PvUl9F/hSaVzM01UHZ7rqmtEn7unhg0BOoe8AZ0KQiqe+Ton\no7Vqcwo7K6zQVz6EzwUBukkEaNurS5VeHsiRKzCfB/cIQssJDhnQjU5oKOOsrRABvdkMhG7H\nF/IlgLRSglqbTmTks4XQ4qppoupjyDOPhO2Xjpc2ddvVmTWwP8Zd7vXPBGiHoLaOVkSQVmEc\nUDV0KR34rG2w26nle/tMhMZe+SA+lwTo5iZJjsPkziVnNHCCL2paQN8ofOYfNEIjAT0s3IwN\n6P7jkOzQdxvSH/pRhBa2IckhK29U6a1kHdCv1X4AtNRr41n/TIB2SX+co5UQlnU+OxANuQtd\n66xbISl7DPZ5CO0B6LTu1wB0kiY07M41ZqjxI/ANCQ4hf+5zUqJGdvJ/VUA3Kki9AN02ocX1\nGxeg+wXoXPl6mNC68kbVffdE8FzV3Rod0NtqeIZI/aCj5QS0owHNf5irCeA+FjYQwdqMlvcZ\n7cMI7WASPsXR/lSevzu0TkD7vKEQuoY30kiSUEBvBq9WGqBZGTGvAA5L0U7tRltqxvZ0w38h\njcI3ht3UAl0X6lbXmovjUFUvF64edn3XDQ3Q5pGEr9BnArRL74q07cIyzOfGgmjt3G+cfG5L\nGWuetJdgH0LojWHqD8Be1ZNTzqOXBOjUOQ7od3tvoPiySb+GbVwI7mGE3oxeXHJXhZP4sU8r\nAy7KOpC0lwiTg1lrmgufwSa02L5+EjrWASfET96wvkkTVftuJo0BwiKgobk43vrVr+Dn/lPM\nOS0b0Kq7BdhGPjdGRKvuQikHD4yI7iqX9twkgNDCgxxQ6tm7qdw/1CFA6/J+u7fxgUcKQEux\nAwNa6F8Epx7kvXXStuElBeoGAHSj7NYo28fMtgho01wc8GqmJFH18Vhf8Pw6fFYBvXtWdjg/\ns9nrns/wZwK0Sx7uakhoX9Vc7n4T3KihK6q3T0PoriYOQd83gU+NB5TFOctQv2dpgE5J6CQx\na4y3E7TSQxs1EhVANzKhTTf0Rt6ZjRIfNnVPCTeXlQp2x4+bdgSAFdBys1x+LaJQLcSTN4rm\ng46T6frFPQBz1TqPvr7qCuCvvc1d3tqeF9QTXtpFbymLv9KpiSL0JcgHRIuMxcBYZrJ2zoij\nE6DtMrcHIgG90W6PAdBCVw/IR36+KIVyD2i2kuegxd3aj0PzWt6kJ6hvgOU2Cw00WQjQ+WS6\nfpugPgL9zskehDka0N06ZaXxy2jHZ/4DHLBk0/ArnZooQreQ7Rk9ABfTSjYKzecSAP1r/Jw2\nx5EB0KZWojehN9oeSvCdGp3QUPkbad8bMYo7QLeh3bemNwOTxWUnoIVFPX0tELp/C5zxghCg\n42SsSptgRPM9gx+EycLwuVERfYJXi3zu5IXp/jc6mc8Do6cOyiKiA5gsCYvnIgAtEDqsCR3w\nqCrQWryozH0z5h88jfXyZkCDl+Sz6QL1Rtz1RiD0pm0lf5oAfSMs+jxBlDb3n/q29DDrtOkX\nJ0DHyVKVNkFvxm7b3k/212Wg+/qqK4xxIIbIMCWPcmLsB4Rjw/h/k06Kt+dFGvPPAKIbT8zc\nCP+iSFcCoEdC89P2/JNkKrpJD2jlz/5G/GaI/5soOY1RpgPaRujP4QcHdP+XYjMSumsZczi3\n64AmdH/m8ntdLMBWAN1+6O9jDuWTAAAgAElEQVRXn6C2fX8jQMfJVpU2IbPxbPqUqg0YoYC2\nVonxKZ78sT8x9sNGYSemN5K9+Sztkqg8fhi2e2BGrBaOznsI9wlz0CKh+9OWrqKZ2E9q0V6b\nTTyggQa08OeU/5S2m+NRRtaQ4BjawVokSoBW686w0ydvNIvmbUqjPc+bFtc3Yru6t7/p+zXf\ntI1p5WRNZy6nmwU+D4R25NcI0HGyVqWNN6KFgQeMPqZiyKrkxedmqDCnBqg7Tj53slF6M9g3\n4YR+ElvNm/GBYS80ZsSK4ei6N6oMQA+EFlr+0rTD/MdI6RtlC2C9CU9nPwFLw1GHR2un/jBS\nETXMRJ4JDc9+4bPpg9AOaDlFKKy/xOanfA4toTdt74z++WADAbpVn/1QTlr8APw+IqjFG6Pl\nQFQRoOPkqEp8JBL+26fMCHMjOgzQiK+UPFROQFEsn1uZEM1dhgyKgg2k2oaznIcW8YoFdBCf\nSwF0T2gxNQNysk1x9vezf6AKWG/Yc5OAU2VuQz8yaf3A51ZCjZBKyfla3aFp1ATH54jpUadG\nWdkf6AJgsdxGC83+sWDTti7ac1CbGT2g2/y0GjBK1ln5HTYyn6Xr1K6lXhzZ5KpKGzyin7Rx\nu/oaxd1hqHxG5fwuMXTS/6L78bkxIpr5QGN+PQgtgvVGfpTD1/kAejgtJJ7LAbRA6OHMn7SF\ndvmm6S41WKDTJvQhoZAzkWxvettOBkC3iIZakZ89vYeM7xBTwJc0DdD8O8GG0Ve4t+Bt7gnd\nPRy8gQ5xGvEs5qeHX0EEtGIOP1qUylvCjwAdp/+cXNqwH09PrmKXEhtg7QZYiZVyzBvkbjd6\nQXYSn59+R4fLy7/OeCTn9Rn3adscynJXA7T1fFkx0A6unlaYJu4H3RIaArTSkL3pC5pSEVwc\n0AFN6L6To37c3rbT0GTRPSBybdpcxPDHpVH6D6nldUAP6eWByyYMbiQ+D4AW3U7NiGfpCWL3\nC/TNBgXDG0XAsY1bWhGg44SoSu21t7ai2+/r8BZoNaqt45/gMLmzU/BpPncCW9FyZ4GANrSW\n1Usp59GLaUF3hBZzHA2UwGgTDawJpyY+JHVfbbwJLTbKgQY0DtC6LsD6bDtb3KgJDoNOehEx\n/lgPEvOR+aYxv9GmqjtCf8pqhsY1RGg5hkb4GgltQXcrAnScMFVp40A032C8RRChMYAOSnCA\n7oF8bmBEy50F/Am9ekD3F1UHNNBF46Z/lPG0uRlgAlzsPvfkS2ihVW5vQI9Xzn0IdqJdnvny\nh0VLcICCAC2bOg/b7tTnopvuPxXPQuNaaBp38XNB/FCRVfKqSZGbsQzloLMJNyi3f9AOQahd\naQkfoDdHAKClL172PQH3MD43IKLlo3sTevWAHi5qT2jhgoLt2E27gU1oz39HG6DVdLzj8YnW\ndUQ6cCCgxwcen0JxRwjqgA6KWeFpoS6lkJrBaHMgmyGfojaN274iQpN7uNgn88kSoOOEnDVh\neNKuxnu3wh60WiMaAWgrn73GKW4i+NwAiD5FEtqsDf8ia035yaW7IsgdmIoAdPctG2xCixfx\npuNzv5Yjge9jBjT/MFyLJ1uXatsdswDaRWjhgbQHb09aqZCgFVvJ0gCsE1xMDLce45sxDFsC\n89swbuO/X9se6CPuZB4/kCSqzvttVe3YbNCP/J1VXPfVYz8x3XZ/Fot3M5A+HscP3eR1/byl\nhyZW1wa0NswDRHT/wdU7VCW0N6C19rONRWrr32/ODV1ql9LYNrRdJ7j3nSahCqHxXAygG3ZV\nAUDLfOY/N8pantdVL7XU/3EsODx2hF/c5OSzCuiWa46/m/xnFzJj5LhiMAWghWbykOSQ7YWS\n4x5qqloMp80w/KVV3+2oEUckSs1zRSmi6lx3yD2zV6d0s/a/8DcUgvNBSyshQFdVNKGvDeiT\n1nNofJTzpCwAnd6179oyPdyANjegNx0xkcNgNlHN507KA3EjoVOonfNBEVDOXcLkbtDUDwk/\n9X4ckrQscK8NDtByiKizUhnOUDq2dPDTmN61XOyNxGdh1jn78QBABzaghUUlaJWCeoJ6/P2E\niNooRaRJl9x8ThJVj9XuyF+bsmevfa04i48VfxUs+EaVduWZl5dfn9J92EvFg3R9QDNJkN7I\niB5ifAxXobihK7LkbpGdzw5ESw84U/C5kWqYNGuOfHopmtB9f1vp4bnO4AA4C+6QJgc0lIQe\ndGPkc3u95UsNAvpJvU/4OT8AQAsRYOaRlnDWUx0G9Sev7Bku2Ui9NuYUtZCHlrb2WZBGDTwr\nn5NEVVXxDMaZ4/W5heuOv/5VeCfhm1i+acvXDQzoBC+9KgPQTAJ1hVzhGOgbrVi3QrXcjHXD\nE9AanxsroqUugmn43AgVFBjzm5LQWh8UHdKBcIbcBU0+H7StCX3TNOZfT2tCbwD3toh3v7v+\n6IIvP9dP6c++IaqAB4KfDYK1vzIAunPp4KnddxHKMmKFprTA7jHXwQvJeM4cVTJOd+2bunfS\npjeWkFbLd1kNwGlJgGbq6Qt93+y261ssaQ4XoI0NaDGh3MYNsLf4OCcZn5sB0dCQsoSEBr6o\nm5TCfdS1AN3c6Hfxxv7boQCNeXxt9pd3/kR9LxOLj4vO9MavXwCg0/GZH1+/7+Zmr9au7iq/\nRGjJPzyqfsGSC+2rRyHFfLzQ9dwlOgbSnnlGupOzBb2YFIeorl+NvFJ9f468h7amb0T7AVri\ns7Tl8xNqRJ9MxaMlxXomQkPXRu2sEQZnk3un6QE9jCZ0PWRWxZKf0oNDwB1+fo0SxGflyQYU\nWBCf3aTlNPqVE9Bs4SSuQ+0FJC54/261sf35GRNVKEBfGs3Vdj8813upnvf9o8IBvyKHh8R0\nm4MW3kA4fPiwn5Zb5QGaSYWxo+utkdA2QGt5QjOfGx4iGqwGgsZ23wAkNhfyENp2beLg7HC/\nGqAVQiuzFUO6aTYOQGspOB8hAA0AVMiH4A/VsWgEND5rjZKcl+NrbBljoYy9fS0v5QZ08/bI\nOmX0aebd+IJvA6DHXh8goHfRfC4U0Ew9lDHjIoBHhRzRkLvxXSKDh6FBrCG6z0Gkx3N7uGER\nJrRzf/t52b9dRPK5KEAPOY5GQPINkPDQdSMBeqO6P+kbfaQCWoeQBdAI/g0aSfQrE6B7nT6H\nXAuC0NYS8qPD1t1cOllUHZ7rvnPcuXtq2FgBPfSDbsQtlx/bWnigGKpyAc0isYUzJvThRrTc\n1rH3e3LxudEQ3T3Fy8NnqVe+TGgcosEvj6J94Gnh6nSZgB4n5kSHlUhoBdBPQA8PHwkR156m\n5N5t0q42K4xpnfaSG4q5Aa3204i2ksJ4mqj6GPLMI3T7peOlTS30dhb20j8c+gR2jEoGtHuo\niCCI0E/MHfn2vbG2OP6qjx+AaQ1S6iS0og3d7WzKBGhkpSsL0I3chDY+idZ0I3UKkgCtRVQw\noCU+68Of1MN4YU/9Fv9LyEE0GYL3pBA6xqvvcDea5I0qvZWsA/q12qMB3dyPwxHDTyraAacg\nQMtvZ3MIIPQG3R9V5LOjpDJqKhuf5Rl/gtIc1poSBGgX9THuKQGNm+D08/RLmEO1m1YVN3Pq\njVhQ2AWYF9d3KtZhGtduR3ia2o20mvc189Avy5pP4zGjJJ5hnH37IARZOEFU3XdPBNteGUw6\noLfi2EAXoD8W+5BwlEezBPjqj997aM0g6NMjSmziZpA8409YIrrpPXSuhgAazeeyWtBCjmMz\nvBwGdwSxCd3vcjJMjeTZhFYyHIav8WIT2tTf0yztKZiwJmULunsE+ct03+U+c3hf5UlI3qg6\nVNXL+fLPru+6oQEaHElo+ZCgCV06oL2kYeuEfdLlw+emT4Oc1Ne2pZUw4097UHGjH6FTAhpX\nslhAd/9gb9zNuI95Ji9lO9553M84m4UA6E/vY+h8Fld9puMz78LHBN13KfiG5ZC2Teao2ved\nL/oVIqDBuTikD9JcHHzdOb4JvShAa9g6Iati36rCP/BjiD5l5bPepdST0PLvoqU7vK78p/Kv\nU4UBuhEI7dVBpc1WdwMr+c/2yQYon3AQ3iMmw0ob4SlNiOQVcQCfm5PYhI4A9PDoUe63Blwb\n8TnfuBz0BDF3VH081hc8vw6fVUDvnqXiTkBfkB/bhF4WoFVscXdEdWx38+vPvLFOZpNA8oQS\nWvPJRWhTNgLR6R/YBV+4VbmADkpE8L3Yf09Plt8N3SyXeo4qYWcCdBo+pwG02InY0bNYDkSF\n1eNa3HGniaqitDBAK4loaLQ0tFNbyjdc8/JZnxjM74ifv2BEi4BG1Qx84llQWYAWchy+6uLp\niTe72+SG+XcD5sgAHOU/rc7UUxuXQJrLJRjQShbaSz2BYUA3BkQLhxEDSW5Wo45PgM6mqQAt\ntyyHsX7WwA7ks/PcDaOXrM0Nmz084Nx2dANbRUA760YQn4sDNEwrhPpwenraPDknEBgAbb5e\n6qPsTxW6OqDHx3nxfI4CtEhiLbrFAriLLec9MHsQoLPJdP2CWzZmCTVAmM7IHNuhfHYAGhOl\n1jJgOg9fR9uaYg5+FdCmOhKULCwX0N6/yxBOw6NBwV0d5Tp0yDAcRu9ppOXJ9Cu3+QxpQBtC\n6xRe5RBtDZ8GiPhkQ36MaNyBAJ1NxqqE/Gvro7ESyDOD2YqHjAe0ARr7a1miGLT3SHz/EhGt\n/3pDL74R0MJyE/BgEHCHdFVA++dd9Vx/1/+9yyRL28cecxBmgI6g+l9cANBgPx6HTGF1Cm4U\ntcR1fBU8eTK6lxSFxlIE6GyyVKUIRBv2HOqBPK8BHN/BfLaFi8+vZIpiTJdSu60V0dqDNLk1\nHdRuNrsLugaghyS0uXFrEgzoz5tPsMCmO0gDHAd4rAt8IwIBLZgjFQxo01a1mWy0H4v4sJoA\nDasAQAcjmifCwC19U0XtUwpEOC8ZBiNjuHj/PuAORnvc2YpVA0I03CFqWDBXFNQvVxyg29MW\nnrdhpWOVTVcsuqiEHr56yLtC3W5QgO7KePU/sX4vs91BU51Ctoals/dkNNOntZzl+zYBOk6O\nqvTLn5D9BIoGRIvuo/QgZwUD24omCIX8uQGC0vIsCoXoNtJlRAv72TPoRj4jv7WWDGhPKWC9\nuTnZRuGNgL5gXMxpIPlsArQfns336GTf/AveHZ2tOCkNbBSjMc3tT8dJEKDj5KpKvzwRze9U\nCxH4pt2I7oLUOdub8PGuMISCMzbqjhbGYd8gPo7w0pvRQf1nkO2gIgD9VVzTArr/guB1EK0d\nfFJzGEMJ/q6Jdj2fL+9Tmj5P0yeUtYCunN/cr4hHz0ZSmiyQfNYALVtA9IXoPJZCN8IJ0HFy\nt3V8EN3huf9hJDQc7Eqh4Fwr5B71zFMOPxtBN14vcVEQ/em0txthSpYGaE7osaOAz0F0QGuP\nT9si7TPDG5bZ4HjecELfqB6fwhLAXTBmPU4X3XkTYKVkg2Wyai+3oJVzcwIYKIfAMwE6Vpgv\no1hEs9skD0MCb9ylasCYGBEdxWfIPbpLivRA3CbPSRm68BYQHQpoXMmyAe1102/UDwDnb4Q2\n8mc7IVM7V+4n39Buah8gji8PBBvQkSMDnPdHtRdhCbj5BrRiD8Aah12YzvSQMJtw2UJs32Hl\nC/6FODCiTTe0rxc3UdPRae5JugwO8eqoqZ7jGAdE9y3psBQHtmABgNZyHJ/SR0ASTcZFNZEM\ncV5IYbQdIcVBhW1Hoc2Yn+67MUL3MBzQqD+fBvuw9rLTXuSvuuhoFH+KGz9Bd1EE6DhhH+e4\nGtFtK1BfDyP6xqG46ei0c4/wko3475J6kKVUK/SHhvZdfQ9WIKDl+6P/5vLXa77YblAALf5p\ngyKxnZBJKbIZGtTd2k84weH+Lm8SPkmcU2ADXVgEsyjwqQPxSYDOJvTzdnue45e5yQsh2vac\njU/ymPC9e2lH3Ni/zwWbaoAeZd+r/4DlenGAZvEhf5Z3gR+atf+MDwH5fuLvpl8JtkYKq8+B\n19IoI7AB/UvoSQycj1no4hMDWpSW7RhXG86eAF0eoG2IZlyxHeRT3dMajZ+x09HJ+fMoK0AZ\nhliKDTTOWZDUyjUGie48UPmAlmq/6WIrhBYA3e0BA1pZI7xGUIw4kM/jlfNoRnvEyhUB3QzX\nU0Syz/cFAnQ2eU2WBCMa8wxRKWO6oR1kXHx2RI7gngOmOUbBC9/gT8OHTxusP8EGt/vkzZum\n6wdtzXE0Aksd/YIboS/G5zDW45fQs1q4VWD+bbxiQsyp4dea+P/Z94qT6wK6k5qaTuBOgI6T\n52x2elMZ38XD/pJJfOZ16ERsKnCSSiZX3Ch4szpEj4AWV0OE9iLzePImXQnQDcDhT8N6YJ+b\n8QnhMBiPXzv+F2y0cF6hjbYgH+kErTSfnm+6ughAy49jk7gToOPkO92oks3wiUJOGcDdjzBC\n3Ji+hJ20kkkVMwreLvFJFPQM55NfQvNMeOGdBZgKAnTTfkWwhsVIaAHQ4hf0T6mYO8D6N7oo\ngO4N1H4Q5hMLepZYBqAbOIhcz0cJ0NnkPx/0iGi4D51FQ0e83t0Pze3RtRXaqhNcMpX6p0U5\nvH+JEteKmy37OQ9QJKDBa9n9TVLDYwwZqbdd24NcedwoDpbChZn+2q3BEtk3KDTsigE0JAK0\npnIB3SPaG89NMwxlOYWwmRsYbLWhftnwLI6Cz+H+SxWw0VzeaV8EoBFNaCE3IXSB60Om/Ufc\niwMaTJWYHhriNFqiEBceE/MB9K/x1+zXEqCzKeyNKhdEB4ZiNxg8bByK7ZhCCJ2MzZskEgfl\nZrLXKA2N0zCWcbkbdEVA6/dLgu+nHjL8o9DLkLsDqZKMgNaPFhMPRQNalBhqBOjsCn3lVXgo\n9j0VAvZEeHP3jM3nJncvPm1SBgDBQWhW3TUVAWj4FzK8ZVdJYEBXoe/EFwhowVK/clq2LewY\nJvukIkAnVumAjhH4EnjEblj3rHjOOw5GswcxHYRm2F1QCYD2+3VGQvNcBvy7sYeqCRrQzhle\nIgNhNoCGKhgBOpuuAeigYC63z39iQlsmZYhCs9Wd6ZqA7ifs8TsMx/Kvpm9Am66coQWOkPpk\nQ9v+S18K1HwA7edOgI7TdQB98g5on+JTx3raRrT17CPQ7HSfcsJ+sAnt/4u1YO7/YJkBHSoX\noPsv+QkigAA9Ly0d0L5dqH3dMwocBZ/VPqEKBnTINfwU/zH23Q8w1ne0dTwNPQDKPomWEFVF\nafmA9ghszwpwjVhPh+glVCV/QAdewE/h59UAnUSztidAZ9M1AY2slSkfhKVQ+m/SGPv87lcG\ndNiRPocflt8t0FvebdYEXURUFaV1ABrT58K/dl0p1hM1opdQldxRpRM6TN0M+4q7osUD+ufP\nnzntnSJAZ9O1Ad04wBZCvatVpRkkI5cGaEbnTIBW9ioY0D+5bFsXEVVFaUWAtoEtqGpdsSoV\n/zh/cYBuPt2ADguj2QD6508LoX9atyYSATqbigC0CWzp+/qmkGsUfFb7WC0Q0EMf57SAVvcp\nFtCcviYI/5QFbY85bKeT2YUAHadCAA0mo0NR5zj32PZEsTU10n2mgG4QgPYPJT0cS73tfTT/\nBFjcL0HbGkfTu5ELgSvb9VYPAnScigF0ozU+s0wM1odSxNe+UmtqrPukgE5JaMBdlRJZ9tCC\nxwIVetvHMFYpLJH1pK+2N61NjsYjGc6PAB2nkgAt1ZyIVIH53OGGQDL7JFo8oNsLPi2g1cjS\n5/uBSqLdvaVzzWlvZijgqvmfTCX0VRYzpZwbzwToWJUFaGGm2fTuxjByxRjOPpUWD+j2gk8M\n6CGylLei/pLXWdoFCe+LGGt95Lnsf2qtC3Fv8CDitpO2adxsZ6+6j1xZ2g/0kDCbSgN038BJ\n7Y4AMBbTBGinMCmO9P0KXFeOvaLQEFgavf3d0dJ/cQfjeJHhh8sMlmqvhLqxkQwcEFhPgM6m\n8gAd3xFCd/eAgbs5XSagkV8BigF089XwpT1c7itnCSwLvbHuKBnTvfa9UKUswp+9O2vh5U6A\njlOJgE7s7hdr406mKC0Q0PgatW5AW+VoFiS57eab1PdUAwNPTDOHHdjr7D3xTIDOqKUDOojO\n8v5qfSFAO4UDdGpCFx6z9lt0UrIH8ge0jfHQvrt4iQCdTcsGdLq4FEAde/KOx2Me9kO9w1fA\nogCdmNBFx6zrDoH2fataX4+4cl+ZhvJZEU2AzibT9cvwDEdQdLBbA27sKxB3GOOhoxyEegMK\ne228E4Uu94kBnb4JnQXQakc1eRv2MZr7Rhm7HvlcJTEmvsKAlk8uJISA+D2ZI5oAHSdjVfr6\nNeNf3aiqpPcOAtwzthhOceZfv45V56dSc9jySV8P+iwB0GkJnQPQP4d409yHUXT6WpXSMX2D\nfO6xDmhJahFh2Rhl6grJTFhlOiUCdJwsVYld9EzfjWKqkqE3qBBsp4SpDUDdaIvQQ4gVBglo\n03LoycO6BqCTEjoDoHt66e7y+BBgrfAJ80smegZpBTSTGdBK03pYLR3B4GomNAE6Ttaq1F31\n9JCOmRnGsTnTnxRB/ckHHkevL4OdF6B1W5+TBzQ1oJMTOhug4bEcUrmfP39CwQmvhZTs5Ls4\nMJMU3bAeIlTwbsuj8UyAjpWjKg0XPi33wmeGyeqOk2Afck26gDbGti3XaQK0o5LY3XtNDugx\nyZEmutLfd6/OO/BvEDqSJEx9HPRsFde7mr8/xUbDT2tRoTBfRQ8Js8lVlaRqn4zSwYMxcrpj\nJduHXJAuzGFGh5z9TAHdEvqn6eu07x/A5PddOniBvSs1mRu1wwozpHFq7ZSWAgE6mxATQyoV\nPwWkw6IxQVeyFAJGzYZaiYHfB7/P2ff3Bklnu/sVAK1JvJY/u6dw6KOmvu/ykUsGdI9OI5/Z\nQ/+vQtmv6s5mGEtr4L4gBOh8QvVY1Wq/npKzp+hs7miha+r0VSkNo9s6cWqQwAWqoVuFARo4\n/58qmJUhduZrvVpAGxu6oj0EaBnssp12FOnao68NATpOyMc53iCwQzogGq/YkkLZx3yvgAD9\n1dU6NtREhwoDtGHUjnIxVSobrrS9UeEt5SjtY/NoV5MigtYFZ9leA7TP72QIcgJ0NvlkC32V\nsq1z1Vwk0h7HaPgbh/gtsv8kbhGLCuv9vrjYTv5aKY6gwHK5s4xRgK/1IPwPZ7Stcf/woO0Z\na4UtbB/0Rx4oToDOJvyX0aDQNEDDNxplE1dQ2dxtrQykbPYIRhqzQkIbqP2kA1qCtUbnWQI6\nIaHlB9uRKNUOcWot45rmZsKro+DxlqhoNt93YW/JyfzFTS9DgM4mn7YONm4UBALc8AS0uH/v\nbCEtiAGleASmHSfvgqQR0D/Vvk3iamm7ee+Yk7/WQ8KAu2AD9PD13d/WeoRTbxlh/NW8+0ks\n5XEIZBhb7rspN/1V3q5uEMsQoLPJryq5Q0G9yWM3eKe7SXJHeeiASpCe7Ju1rT4n08R8GcXo\nqyp9o2Ufp32BgE5GaCVLHAFSPkxDc4eI5SVbyz4M0Oj4dQetCdCYZQJ0Nnl2iLIGAxwsYnvQ\n4Q5K7GzvOHh3AqfGBWZwV+wJTZDi1igNnx2ulOZu0PW62QV8lTEkzqTv396movlX9axOYiog\nyNbctP8qJdDhMgZP5LmgAC0ug9811fUIdwJ0nHx7rNq6FNiPJDIEzzhhZgHcDp601fZ0l5vs\nGaQZ08AW5O9cJKADYPoT2EmdUy2U0D/7neXuwtHWxhY4azKf5FKpu4vEdhLpl73dCdBx8h9S\noIHAj4c/PWjSN5Q8gRvf5996ihN3EoFh7E1mg7ugqw5UCSC0mgnQsmmBkBv43EjBHg1/Y/KF\n/y04ydsKAnScOwE6TiFjvgzfhfAannc5yymHwylVMBo4eJ1efJFgdrgzXXckofev9VVr1DL3\ncWoPII2MUYd37Zv8V+Xc5UdnuPO17ay2URMTmgCdWCUDuguqQER07j/dlP7ZeDeee/csigEj\nXtazjz6BYgEtyPgbalkGOeN8klPTrCMi8njDHkNGTT8h/ZuNsAA/uYVKq/bKn/0kzzgBEaAT\nq2xAh4FTdxf6jumFfoYeJHsTNyukl1CV4l+kBhJPBpuUhm4fDqtA/vrT3TV84KvYWwgoZxgF\nOT4/kzzFJgwQLl+1hfYZpDHpHVnhFhFVRal0QMdJcv8JNqZRvXoR7unVd7fNxOglVKUUUaU+\n8ZMB9lV+Ttg+etZgrHAXPExv/1NfKQkcBSmP2oC+YhniRCt5AnI2YuFGviLXSvt5uxOg41QA\noFvJlM71NT6FxuftWSC9hKqUJqqkZx39gvAPjxhhrQ7ovpzlGP3CT+PzwE6pRkEadGqAp54q\nxY0tcox9RhGgs6kYQHMNlI6a0HTKp3jpGb2EqpQqqoAmqZIJ4APeu8/Qmwy6UsbX0Aw+wif4\njk7R/R1Rrsi0HwE6m8oCNBdmSolw93hB/eAy2qfVvAANSXk4yDMDPGR+Wof4yxNN/xSB3Axs\nlztUyLpO55152BOgs6lAQBfubpzqI6N9Os0f0Gom4OuQx3B0DZXfwv1TfNveOFq1MbZjZ03Q\nRURVUSJAl+puGWSZhNFLqEp5o+qr4aOza6jw3ay7Vy2vf0qlCNAp3QnQcSJAp7RP0ZBeQlUq\nM6rEeSSE1UpGzXQDZ03QRURVUSJAl+ruso8l9BKqUqlRFTPSaNYEXURUFSUCdKnu87ZfN6DL\ndZ+3PQE6m6gqrcueAF2m+7ztCdDZRFVpXfYE6DLd521PgM4mqkrrsidAl+k+b3sCdDZRVVqX\nPQG6TPd52xOgs4mq0rrsCdBlus/bngCdTVSV1mVPgC7Tfd72BOhsoqq0LnsCdJnu87YnQGcT\nVaV12ROgy3Sftz0BOpuoKq3LngD9//butrdNHgzDMF8mr1Rp1DRL26hLq/Kkkfj/P/DBdggG\nQpwlAt/G5/Fhg4ZY98C+RnmV2XrczRPQo2EopdU8AS2z9bibJ6BHw1BKq3kCWmbrcTdPQI+G\noZRW8wS0zNbjbp6AHgkAu10AAAbPSURBVA1DKa3mCWiZrcfdPAF9ySZX+eZw5RLdhRlKaTVP\nQMtsPe7mCegLlkpbXLdEb2GGUlrNE9AyW4+7eQJ62JfKi7LI1dc1S/QXZiil1TwBLbP1uJsn\noIdt1K7680O99T5RqrdEf2GGUlrNE9AyW4+7eQJ62Ertqz8LtdIz24XKt/UndUA7S7QWNhhK\naTVPQMtsPe7mCehhxxg2f63MEeZl+xN3CXdhi6GUVvPjDCVOPafdPAE9zMncnVoeysPSHMYo\n/QH9y/gPMG4fSpx6Trx5AnqYk7krpXdiDvoAhjphD5rmr2v95qHEqefUmyegh7Xi1wllAprm\n/631m4cSp55Tb56AHpafDej6R50lcgI68ebHGEqcek69eQJ6mB0de3tco/VJ+yqOfXMVx56h\nlGzzYwwlfi9LvXkCetib+f1ypzY6fnfuJ/WAcZZwJo8YSmk1P35Ac+oZjuQD2jlD86Eny229\nf1wHNHcS0vw1rbMHHbD1uJtnD/qCRXPxs73cKd8PL+FMWr+Ao1v76pmABo5u7VXCXR/QB3OX\ngJ3eVgG87uazu4S78EUxr9eYa4+x+v6p5yHx/dsaMdcee/UCTfU86CExb9CYa4+x+v6p5yHx\n/dsaMdcee/UCEdC3i7n2GKvvn3oeEt+/rRFz7bFXL1DogAau5X/iLTAzBDSi0Tv1DMwcAY1o\nXH3qGZgJAhoAhCKgAUAoAhoAhBo7oLf1XQWbXC13vUn97iz3FRmdl2Zs/fckjOj22jvP+wvi\ncvWHtVLrovUFQWveh14Vypx7lUgjB3RR9yZ7d/hbZ3Jj7xl3+mPrpRlF0L54R+31SMqnrrnh\nqT43k+5YErTmfehVocy5V8k0bkAX+XGTbM1bstaqaE0Wan3QP1ifvtC61PX07SDuq13bBbxi\n11P9Rte9ce/JE7TmfehVocy5Vwk1akBX2+64SZZmE+31TWDO5Kr3cAX3pRnNt0O4r3btkPvv\nSR6Lr/pc2d+Zm2/IWfM+9KpQ5tyrpBo1oKuN1n4Cmb7JwJmsF2s2m/vSjObbIdxXu51vHUqc\n1HXVu78sy1nzPvSqUObcq6QaNaCL7iMiz76v8NDvmeavogy5Qe+rXTdwxTMjRnNV9Ru1bb4h\nZ8370KtCmXOvkmrsqziOm2Rh/if90nPOpLV1XtDS2dphN+h9tYfc1XHqGKz+Q7XGuqg170Ov\nCmXOvUqkiQL6Ta0OZWGOQTmTxt49qCZqg95Ve+Gc6AnCV/12lTvvx5a15n3oVaHMuVeJNFFA\n2wtwVmbOmSz1SY9lf3EZG/Su2jftFzdOz1t9Wa6d30ZFrXkfelUoc+5VIk0V0Ie1yt/snDNZ\nWS7sYvYC/FzSBr2r9jx0X/RWr4915jLXvA+9KpQ59yqRpgpoo6ivWD9N7hfLvV3MbtDOSzNk\nDCXjH2svrnjvx7g81dfLiFzzPvSqUObcq0SaKKDtFZLmReDOZLnrPty389IMEUPpptq37rns\nIC5Wbyf3zqgSteZ96FWhzLlXiTRRQJt7jL4W6qM1ue89fL1z35SIoXRT7StVdJub2MXqzeRh\n5Yx3UWveh14Vypx7lUgTBfTBnEkw+wjO5Lp+ukCzfPulGSKG0k21LwJfDuWp/vjUBDcNJK15\nH3pVKHPuVSJNdQx6X3W91a4zqfrdsf3SDBFD6abaw3fFi9Wbp4wtWr8vS1rzPvSqUObcq0Ti\nedAAIBQBDQBCEdAAIBQBDQBCEdAAIBQBDQBCEdAAIBQBDQBCEdAAIBQBjUCybLjzXfoMSAfj\nAIEQ0IAP4wCBENCAD+MAgRDQgA/jAIEQ0IAP4wCB2BDWf/5RWfbw1/709XemXk4B/f2kMvX8\nraey7En/5CnLvgMVDEyOgEYgp4B+yAyT0M9m8uEY0O/2k+y9mv5jlqh+8idk0cCkCGgEcgpo\n9W52jB+qub/V3Gf5qexnP/Wc+qnmHjJV/iizGJAIAhqBnAJa7x//2LknO/du557tXJXaL9Vf\nn1n29MgBDiSFgEYgzTHoZk7ZuWNc/z59ZnabX/TRDg5wICUENAI5F9C9uZr5aRXYv8PUCoRB\nQCOQfw5ovV/NW0eRFAIagZyL5GofWZ8P7BziOHrUSf0yeZ1AOAQ0AjkX0MfTgq+tuZ/TFR6P\nVWR/BisYmBwBjUDOBfRn7zK7v+XPg71GWl9t981RaCSFgEYg5wJ64EaV59Jcw/Fq9q25jgPp\nIKARyNmANrd6P5/mPp+qnelHfZyDW72RIgIaAIQioAFAKAIaAIQioAFAKAIaAIQioAFAKAIa\nAIQioAFAKAIaAIQioAFAKAIaAIQioAFAKAIaAIQioAFAqP8Bf7XdBw96nlEAAAAASUVORK5C\nYII=",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 360,
       "width": 720
      },
      "text/plain": {
       "height": 360,
       "width": 720
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p <- ggplot()\n",
    "p <- p + geom_line(data = data_plot[data_plot$reconciled == \"Historical\", ], aes(index, passengers, color = airports))\n",
    "p <- p + geom_line(data = data_plot[data_plot$reconciled != \"Historical\", ], aes(index, passengers, color = airports, linetype = reconciled), size = 1.05)\n",
    "p <- p + facet_wrap(~ frequency, scales = \"free_y\")\n",
    "p <- p + theme_bw() + theme(\n",
    "    plot.title = element_text(size = 16, face = \"bold\"),\n",
    "    axis.title = element_text(size = 14, face = \"bold\"),\n",
    "    axis.text = element_text(size = 12),\n",
    "    legend.text = element_text(size = 12)\n",
    "  )\n",
    "p <- p + xlab(\"Index\") + ylab(\"Outcome (passengers)\") + labs(color = \"Airport\", linetype = \"Forecast\")\n",
    "p\n",
    "\n",
    "ggsave(file = \"forecast_comparison.png\", width = 9, height = 6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***\n",
    "\n",
    "## Bonus Analysis!\n",
    "\n",
    "* At this point, we have an ML model that forecasts at the weekly level and a statistical model that forecasts at the monthly level. Both are forecasting ~4 months into the future.\n",
    "\n",
    "\n",
    "* What happens if we'd like to quickly **incorporate a judgment forecast** into the mix?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Taking stock of where we are at\n",
    "\n",
    "* Let's make this scenario of adding a judgment forecast specific to ADL-PER."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecast_start_date <- min(data_reconcile_month[[1]]$index)\n",
    "forecast_stop_date <- max(data_reconcile_month[[1]]$index) %m+% months(1) - 1\n",
    "\n",
    "# From our dplyr::group_split(), index [[1]] is \"ADL-PER\".\n",
    "monthly_forecast <- sum(data_reconcile_month[[1]][, \"passengers\"])\n",
    "\n",
    "weekly_forecast <- sum(data_reconcile_week[[1]][][data_reconcile_week[[1]]$index >= forecast_start_date & \n",
    "                                                  data_reconcile_week[[1]]$index <= forecast_stop_date, \"passengers\"])\n",
    "\n",
    "reconciled_forecast <- sum(data_reconciled[data_reconciled$airports == \"ADL-PER\" & \n",
    "                                           data_reconciled$frequency == frequency[1], \"passengers\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "'The 4-month-ahead total for ADL-PER with monthly forecasts is: 34506'"
      ],
      "text/latex": [
       "'The 4-month-ahead total for ADL-PER with monthly forecasts is: 34506'"
      ],
      "text/markdown": [
       "'The 4-month-ahead total for ADL-PER with monthly forecasts is: 34506'"
      ],
      "text/plain": [
       "[1] \"The 4-month-ahead total for ADL-PER with monthly forecasts is: 34506\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "'The 4-month-ahead total for ADL-PER with weekly forecasts is: 52254'"
      ],
      "text/latex": [
       "'The 4-month-ahead total for ADL-PER with weekly forecasts is: 52254'"
      ],
      "text/markdown": [
       "'The 4-month-ahead total for ADL-PER with weekly forecasts is: 52254'"
      ],
      "text/plain": [
       "[1] \"The 4-month-ahead total for ADL-PER with weekly forecasts is: 52254\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "'The 4-month-ahead total for ADL-PER with reconciled forecasts is: 43380'"
      ],
      "text/latex": [
       "'The 4-month-ahead total for ADL-PER with reconciled forecasts is: 43380'"
      ],
      "text/markdown": [
       "'The 4-month-ahead total for ADL-PER with reconciled forecasts is: 43380'"
      ],
      "text/plain": [
       "[1] \"The 4-month-ahead total for ADL-PER with reconciled forecasts is: 43380\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "paste0(\"The 4-month-ahead total for ADL-PER with monthly forecasts is: \", round(monthly_forecast))\n",
    "paste0(\"The 4-month-ahead total for ADL-PER with weekly forecasts is: \", round(weekly_forecast))\n",
    "paste0(\"The 4-month-ahead total for ADL-PER with reconciled forecasts is: \", round(reconciled_forecast))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adding a judgment forecast\n",
    "\n",
    "* If someone comes in with a 4-month-out judgment forecast for ADL-PER at 60,000, what needs to be done? Simply make a data.frame like below with a date column and forecast column matching the weekly and monthly datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 1 × 2</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>index</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th scope=col>&lt;date&gt;</th><th scope=col>&lt;int&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>1992-12-01</td><td>60000</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 1 × 2\n",
       "\\begin{tabular}{ll}\n",
       " index & passengers\\\\\n",
       " <date> & <int>\\\\\n",
       "\\hline\n",
       "\t 1992-12-01 & 60000\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 1 × 2\n",
       "\n",
       "| index &lt;date&gt; | passengers &lt;int&gt; |\n",
       "|---|---|\n",
       "| 1992-12-01 | 60000 |\n",
       "\n"
      ],
      "text/plain": [
       "  index      passengers\n",
       "1 1992-12-01 60000     "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_reconcile_quarter <- data.frame(\"index\" = as.Date(\"1992-12-01\"), \"passengers\" = 60000L)\n",
    "\n",
    "data_reconcile_quarter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run `forecastML::reconcile_forecasts()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ADL-PER: Unreconciled weekly, monthly, and quarterly forecasts are the inputs.\n",
    "forecasts <- list(data_reconcile_week[[1]], data_reconcile_month[[1]], data_reconcile_quarter)\n",
    "\n",
    "frequency <- c(\"1 week\", \"1 month\", \"4 months\")\n",
    "\n",
    "reconciled_forecast_ADL_PER <- forecastML::reconcile_forecasts(forecasts,\n",
    "                                                               frequency = frequency,\n",
    "                                                               index = \"index\",\n",
    "                                                               outcome = \"passengers\",\n",
    "                                                               method = \"temporal\",\n",
    "                                                               keep_all = TRUE,\n",
    "                                                               keep_non_reconciled = FALSE\n",
    "                                                               )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* **The new 4-monthly estimate of 60,000 raised the reconciled total forecast from 43,380 to 48,920.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A data.frame: 1 × 2</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>index</th><th scope=col>passengers</th></tr>\n",
       "\t<tr><th scope=col>&lt;date&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>1992-12-01</td><td>48920.18</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 1 × 2\n",
       "\\begin{tabular}{ll}\n",
       " index & passengers\\\\\n",
       " <date> & <dbl>\\\\\n",
       "\\hline\n",
       "\t 1992-12-01 & 48920.18\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 1 × 2\n",
       "\n",
       "| index &lt;date&gt; | passengers &lt;dbl&gt; |\n",
       "|---|---|\n",
       "| 1992-12-01 | 48920.18 |\n",
       "\n"
      ],
      "text/plain": [
       "  index      passengers\n",
       "1 1992-12-01 48920.18  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "reconciled_forecast_ADL_PER[[\"4 months\"]]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
